Scheme 中的'('() 2 3) 和'(() 2 3) 有什么区别?
What is the difference between '('() 2 3) and '(() 2 3) in Scheme?
我刚刚发现:
(null? (car '('() 2 3)))
returns false,并且:
(null? (car '(() 2 3)))
returns 真.
这两种格式有什么区别?
记住 'X
只是二元列表的缩写:(quote X)
.
所以(car '(() 2 3))
是(car (quote (() 2 3)))
的缩写,而(car '('() 2 3)))
是(car (quote ((quote ()) 2 3)))
的缩写。
由于 (quote something)
的计算结果为 something
,当系统计算 (car (quote ((quote ()) 2 3)))
时,计算的第一步会产生:(car ((quote ()) 2 3))
。该列表的 car
产生它的第一个元素,即 (quote ())
.
所以不为空,结果为假
我刚刚发现:
(null? (car '('() 2 3)))
returns false,并且:
(null? (car '(() 2 3)))
returns 真.
这两种格式有什么区别?
记住 'X
只是二元列表的缩写:(quote X)
.
所以(car '(() 2 3))
是(car (quote (() 2 3)))
的缩写,而(car '('() 2 3)))
是(car (quote ((quote ()) 2 3)))
的缩写。
由于 (quote something)
的计算结果为 something
,当系统计算 (car (quote ((quote ()) 2 3)))
时,计算的第一步会产生:(car ((quote ()) 2 3))
。该列表的 car
产生它的第一个元素,即 (quote ())
.
所以不为空,结果为假