5

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

具体来说,我注意到:

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

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

我试过浏览 clisp 文档,但没有成功。

我的问题:

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

2 回答 2

7

REPL 变量记录在Hyperspec 的环境字典中(搜索“变量”)。该标准不需要保留三个以上的输入/输出,而且我不知道有任何实现。

于 2012-01-02T10:51:34.490 回答
3

如另一个答案中所述,这些变量记录在 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

于 2012-01-02T11:29:03.023 回答