我注意到,当我在 REPL 中键入一个运算符时,它通常会扩展为一个与输入/输出历史有关的值。
具体来说,我注意到:
+
,++
... 扩展到以前的输入,*
,**
... 扩展到以前的输出,-
展开到当前输入
显然还有更多(/
扩展到某些东西,但我还没有完全弄清楚)。
我试过浏览 clisp 文档,但没有成功。
我的问题:
- 还有哪些神奇的 REPL 变量?他们在做什么?
- 有没有办法访问第 N 个输入或输出(如 IPython
In
和Out
数组)?
我注意到,当我在 REPL 中键入一个运算符时,它通常会扩展为一个与输入/输出历史有关的值。
具体来说,我注意到:
+
, ++
... 扩展到以前的输入,*
, **
... 扩展到以前的输出,-
展开到当前输入显然还有更多(/
扩展到某些东西,但我还没有完全弄清楚)。
我试过浏览 clisp 文档,但没有成功。
我的问题:
In
和Out
数组)?REPL 变量记录在Hyperspec 的环境字典中(搜索“变量”)。该标准不需要保留三个以上的输入/输出,而且我不知道有任何实现。
如另一个答案中所述,这些变量记录在 ANSI Common Lisp 标准中。
除此之外,Common Lisp 实现可能还有许多其他特性。具有用户界面的全功能顶层通常称为“Lisp 侦听器”。
CLISP 实现在调试器中提供了额外的命令。请参阅其文档的第 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。