我注意到當我在REPL中鍵入一個運算符時,它經常被擴展爲一個與輸入/輸出歷史有關的值。CLISP的REPL中有什麼神奇變量?
具體而言,我注意到:
+
,++
...擴展到先前的輸入,*
,**
...擴展到先前的輸出,-
擴大到當前輸入
顯然有更多(/
擴展到某些東西b我沒有完全弄明白)。
我試過瀏覽clisp文檔,但沒有成功。
我的問題:
- 也沒有什麼魔法等REPL變量?他們在做什麼?
- 有沒有辦法訪問第N個輸入或輸出(如IPython的
In
和Out
數組)?
我注意到當我在REPL中鍵入一個運算符時,它經常被擴展爲一個與輸入/輸出歷史有關的值。CLISP的REPL中有什麼神奇變量?
具體而言,我注意到:
+
,++
...擴展到先前的輸入,*
,**
...擴展到先前的輸出,-
擴大到當前輸入顯然有更多(/
擴展到某些東西b我沒有完全弄明白)。
我試過瀏覽clisp文檔,但沒有成功。
我的問題:
In
和Out
數組)?REPL變量記錄在environment dictionary of the Hyperspec(搜索「變量」)中。該標準不需要持有比三個更多的輸入/輸出,並且我不知道有任何實現。
正如在其他答案中提到的,這些變量記錄在ANSI Common Lisp標準中。
除此之外,Common Lisp實現可能具有許多其他功能。具有用戶界面的全功能頂級通常稱爲「Lisp偵聽器」。
CLISP實現在調試器中提供了其他命令。請參閱其文檔chapter 25。
LispWorks在REPL中有一些擴展,並且還提供Listener。下面是一些例子:
互動數字2,在CL-USER包:
CL-USER 2 > (* 3 4)
12
相同,但我們可以忽略外括號:
CL-USER 3 > * 3 4
12
讓我們重做互動2:
CL-USER 4 > :redo 2
(* 3 4)
12
讓我們重做交互2,但用除法代替乘法:
個CL-USER 5 > :use/* 2
(/ 3 4)
3/4
與像的命令,輸出歷史,或類似的特徵擴展其它實施方式是例如Allegro CL和Clozure CL。
SLIME提供基於GNU Emacs的Common Lisp開發環境,還提供了擴展的REPL。
這個答案也非常有用;謝謝! – Kos 2012-01-11 17:48:57
哇!我不知道IPython的「In」和「Out」陣列,謝謝! – sinan 2012-01-02 11:37:12
它也有短'_','__' ...這意味着'Out [-1]','Out [-2]'等。 – Kos 2012-01-02 15:01:53