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

3

双方都

(not 'nil)

and

(not nil)

评估为T,那么'nilnil之间有什么区别吗?''nil又如何呢?如果''nil评估为'nil,那么''nil也应该评估为nil,对吗?

3个回答

8

(quote <anything>)的作用是将<anything>作为字面量返回,不做任何计算。符号'<anything>等价于表达式(quote <anything>),无论<anything>是什么,都会被原封不动地返回。

此外,nil会返回自身。

其他对象,当作为字面量时也会返回自身:某些符号和所有非符号原子都是如此。

'22有什么区别?它们都会返回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)呢?

引用的意思是,“将这段程序代码作为数据返回,而不是它所代表的值。”


6
当你评估NIL时,你会得到名为NIL的变量的值,而当你评估'NIL时,你会得到名为NIL的符号。然而,这两个东西被规范定义为相同的对象。请参见nil的Hyperspec

nil n. 即是COMMON-LISP包中名为"NIL"的符号,也是空列表、表示假的布尔(或广义布尔)以及空类型的名称。

你可以自己检查:

(eq NIL 'NIL) ==> T

然而,这里的等价性就到此为止了。''NIL将被评估为列表(quote NIL)。

1

没有区别,只要你考虑评估结果即可。

nil

并且

'nil

评估为相同的值(即nil)。然而,就读者而言,确实存在真正的差异,因为

nil  ===> nil

'nil ===> (quote nil)

如果您有嵌套表单,这将特别有趣。

((nil) 'nil)

这段代码被读作

((nil) (quote nil))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接