CLISP的REPL有哪些神奇的变量?

时间:2012-01-02 10:12:13

标签: lisp common-lisp read-eval-print-loop clisp interactive-mode

我注意到当我在REPL中键入运算符时,它通常会扩展为与输入/输出历史有关的值。

具体来说,我注意到了:

  • +++ ...展开到之前的输入,
  • *** ...展开到以前的输出,
  • -展开到当前输入

显然有更多(/扩展到某些东西,但我还没有完全弄清楚。)

我已尝试浏览clisp文档,但未成功。

我的问题:

  • 还有哪些神奇的REPL变量?他们在做什么?
  • 有没有办法访问第N个输入或输出(如IPython的InOut数组)?

2 个答案:

答案 0 :(得分:7)

REPL变量记录在environment dictionary of the Hyperspec中(搜索“变量”)。该标准不需要保留比三个更多的输入/输出,我不知道有任何实现它。

答案 1 :(得分:3)

如其他答案中所述,这些变量记录在ANSI Common Lisp标准中。

除此之外,Common Lisp实现可能还有许多其他功能。带有用户界面的全功能顶级通常称为“Lisp监听器”。

CLISP实现在调试器中提供了其他命令。请参阅其文档的chapter 25

LispWorks在REPL中有一些扩展,还提供Listener。以下是一些例子:

CL-USER包中的交互号码2:

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