我在 Scheme、Racket 和 Clojure 中注意到表达式(此处使用 Clojure)(and true '())
计算结果为 ()
, 和 (and '() true)
计算结果为 true
.这不仅适用于空列表,也适用于任何列表。
但是在 GNU CLISP 和 Emacs Lisp 中,(and t '())
计算结果为 nil
和 (and '() t)
计算结果为 nil
还有,但是 (and t '(1 2 3))
计算结果为 (1 2 3)
和 (and '(1 2 3) t)
计算结果为 t
.
这里发生了什么?
最佳答案
在第一组语言中,空列表不会被视为“falsey”,而是被视为“truthy”值。在计划和 Racket 中,#false
是唯一的错误值,即使 '()
为空,空不为假;在 clojure 中,空列表与 nil 不同,因此它在那里也是“真实的”。
在第二组中,空列表是 nil
的同义词。并被视为假,导致条件返回 nil
.然而,包含元素的列表与 nil 不同,因此再次被视为真值。
最后一块拼图是 and
如果传递的所有值都是真值,则返回最后一个真值。
关于clojure - AND 一个 bool 值和一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40661000/