变量*,+和/是否绑定到SLIME或Clozure CL中的最近输入?

时间:2010-09-09 17:59:03

标签: lisp common-lisp slime

当我发现这个时,我在SLIME(连接Clozure REPL)中乱搞:

看起来变量+,*和/都绑定了最近输入的某些变化,+是输入本身,*是评估输入的结果,而/是列表中包含的结果。 / p>

这是对的吗?谁对此负责,SLIME或Clozure?我在SLIME手册中找不到任何内容。

谢谢!

; SLIME 2010-05-13
CL-USER> +
NIL
CL-USER> *
NIL
CL-USER> /
(NIL)
CL-USER> -
-
CL-USER> +
-
CL-USER> (list 1 2)
(1 2)
CL-USER> +
(LIST 1 2)
CL-USER> /
((LIST 1 2))
CL-USER> (+ 1 2)
3
CL-USER> /
(3)
CL-USER> *
(3)
CL-USER> (* 1 2)
2
CL-USER> *
2
CL-USER> 

2 个答案:

答案 0 :(得分:4)

Common Lisp标准指定了所有这些,甚至更多。在the environment dictionary搜索“变量”。

答案 1 :(得分:1)

+
++
+++

  

当顶层循环正在评估表单时,变量+绑定到循环读取的前一个表单。变量++保存前一个值+(即,前两个交互评估的形式),+++保持以前的++值。

-

  

当顶级循环正在评估表单时,变量 - 绑定到表单本身;也就是说,一旦完成这种交互,它就是给予+的值。

*
**
***

  

当顶级循环正在评估表单时,变量*绑定到最后一次循环结束时打印的结果;也就是说,它是通过在+中评估表单而产生的值。如果生成了多个值,*仅包含第一个值; *如果产生零值,则包含nil。变量**保存前一个值*(即结果打印两个交互前), * 保持前一个值**。

/
//
///

  

当顶级循环正在评估表单时,变量/绑定到上一次循环结束时打印的结果列表;也就是说,它是通过在+中评估表单而生成的所有值的列表。 *的值应始终与/的值相同。变量//保存/的前一个值(即前两个交互打印的结果),///保持前一个值//。因此**的值应该始终与//的车相同,对于 * 和///.

来自Common Lisp the Language, 2nd Edition 20.2