我正在学习 Scheme 并使用来自 repl.it 的在线解释器。我无法理解为什么会返回 #f
:
(eq? '() 'nil) ; ==> #f
最佳答案
在 LISP 1.5 nil
中,'nil
、'()
和 ()
计算为 无
。读者将 ()
和 nil
翻译成同一个单例空列表,它是自评估的,因此引号是可选的。 nil
也是唯一的假值,所有其他值都是真值。第一个 Scheme 实现由与 1.5 兼容的商业 Lisp 托管,并且大部分主机在第一个 Scheme 中透明地使用。 Common Lisp 是 1.5 的后代,仍然像这样工作,但是 Scheme 在报告与报告之间有变化,这些是 R5RS 和更高版本的规则:
空列表是'()
。它被引用并计算为 ()
。它不是 self 评估的,所以 ()
是无效的 Scheme 代码。 'nil
评估为 nil
这是一个符号而不是空列表。在 Scheme 中,唯一的错误值是 #f
,因此空列表是真实的。
在代码中:
'() ; ==> ()
'(1 . (2 . ()) ; ==> (1 2)
() ; ==> ERROR: Illegal empty application (not allowed)
(eq? '() 'nil) ; ==> #f (empty list and nil are different values)
(if '() #t #f) ; ==> #t (empty list is truthy)
关于scheme - Nil 不是空列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48998615/