2012-04-04 154 views

回答

8

(quote <anything>)从字面上评估为<anything>。符号'<anything>意味着(quote <anything>),不管<anything>是什么,它只是简单地返回而不被评估。

此外,nil评估自己。

当引用文字时,其他对象也评估自己:某些符号和所有非符号原子都是这样。

'22有什么区别?他们都评估为2

另外,'"abc"和​​之间,以及:foo':foo之间的区别是什么?

区别在于'2的形式是(quote 2),而2只是2。他们评估的是同样的事情,但不是一回事。

评估Lisp意味着数据被视为表达式的源代码。两个表达式可以具有相同的值,但可以由不同的数据组成。例如4(+ 2 2)(* 2 2)

说,4(+ 2 2)有什么区别?

如果4(+ 2 2)都产生4,为什么'4产生4,但'(+ 2 2)产生(+ 2 2)?引用的意思是“给我这段程序代码作为数据,而不是它表示的值”。

1

没有区别,只要你认为评价的唯一结果,即

nil 

'nil 

评价为相同的值(即nil)。然而,有,真正的区别,就读者而言,由于

nil ===> nil 

'nil ===> (quote nil) 

,这是特别有趣的,如果你有嵌套形式像

((nil) 'nil) 

其中读数为

((nil) (quote nil)) 
6

当您评估NIL时,您会得到variable named NIL的值,当您评估'NIL时,会得到名为NIL的符号。但是,这两件事是由规范定义为同一个对象。见the Hyperspec on nil

ñ。该对象一次是COMMON-LISP包中名为"NIL"的符号,空列表,表示false的布尔值(或广义布尔值)以及空类型的名称。

您可以检查自己:

(eq NIL 'NIL) ==> T 

然而,等价停在那里。 ''NIL评估到列表(quote NIL)

相关问题