Common Lisp为什么(列表+ 1 2)评估为('(+ 1 2)1 2)

问题描述:

Common Lisp(CCL REPL)中的评估(list + 1 2)为什么返回('(+ 1 2) 1 2)Common Lisp为什么(列表+ 1 2)评估为('(+ 1 2)1 2)


更多:OK,我看到+实际计算结果为最后REPL结果,但我仍然有一个问题:这是一个标准的CL REPL的东西,有+等于最后的结果,或者是它Clozure具体?

+2

Common Lisp Hyperspec是Common Lisp语言的极好参考。它有一个参考。即使是非字母符号:http://www.lispworks.com/documentation/HyperSpec/Front/X_Alph_9.htm – 2013-04-11 08:23:02

您会发现,在REPL中,变量*保存最后一个结果,并且+保存上次评估的表单。

例如:

> (+ 1 2) 
    => 3 
> + 
    => (+ 1 2) 
> (+ 2 3) 
    => 5 
> * 
    => 5 

是的,这些都是标准的,并且在HyperSpec.

如果你想创建一个包含符号+一个列表,而不是它的价值,你就需要引用它如此:'+(quote +)

+2

此外,'**','***','++'和'+++ '被定义,允许你引用当前之前的'*'和'+'这两个值。 – Vatine 2013-04-11 12:12:28