Lisp:'nil和nil之间有什么区别吗?

Soy*_*yuz 3 lisp common-lisp

(not 'nil)
Run Code Online (Sandbox Code Playgroud)

(not nil)
Run Code Online (Sandbox Code Playgroud)

评价T,所以'nil和之间有什么区别nil?那怎么样''nil?如果''nil评估'nil,也不应该''nil评估nil

Kaz*_*Kaz 8

(quote <anything>)<anything>字面意思评估.符号'<anything>表示(quote <anything>),无论是什么<anything>,它都只是在没有被评估的情况下返回.

此外,nil评估自己.

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

'2和之间有什么区别2?他们都评价到2!

此外,之间有什么区别'"abc""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)

引用意味着"给我这段程序代码作为基准,而不是它所代表的值."


Gar*_*ees 6

在评估时,NIL您将获得名为NIL变量的值,并在评估'NIL时获得名为NIL的符号.但是,这两个东西被规范定义为同一个对象.在零上查看Hyperspec:

ñ.包含"NIL"COMMON-LISP包中的符号,空列表,表示false的布尔(或通用布尔值)以及空类型的名称的对象.

你可以自己检查一下:

(eq NIL 'NIL) ==> T
Run Code Online (Sandbox Code Playgroud)

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