他们为什么在Scheme中引用空列表?

Jua*_*uan 1 scheme

我要通过这个计划教程和第3(制作清单)的人说you should write '() to represent an empty list.但是对于我写的每一个测试,它似乎与使用just一样具有相同的效果().

此外,据我了解,该报价意味着解释器将不计算表达式,但似乎在解释知道之后有什么'符号,因为这样做(cons 1 '())收益率(1),而这样做(cons 1 'abc)的产量(1 . abc),因此它知道'()是一个空的列表,但'abc为不.

Fre*_*Foo 5

一些Scheme实现允许bare ()作为同义词'(),但只有引用的表单是标准的.

至于你的第二个问题:考虑一下

(define abc '(1 2 3))
(define def '(1 2 3))

(cons 0 'abc)
(cons 0 'def)
(cons 0 abc)
(cons 0 def)
Run Code Online (Sandbox Code Playgroud)

在前两个表达式中,abc并且def未进行评估,因此它们保留符号.在后两者中,它们被评估为它们所代表的对象,它们都等于列表(1 2 3).

  • 我想我明白了.引用不会忽略后面的内容,而是将其视为原样,因此`'()`表示一个空列表,这就是为什么它知道是一个空列表,而一个不带引号的列表告诉解释器调用第一个item并将下一个项目作为参数传递,这就是为什么`()`应该是一个错误,而某些解释器允许这样做. (2认同)