clojure - AND 一个 bool 值和一个列表

标签 clojure scheme common-lisp elisp racket

我在 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/

相关文章:

constructor - Clojure:从字符串类名创建新实例

scheme - Scheme 中的多行注释 (RnRS)

scheme - Scheme 中定义表达式返回的值

format - 通用 Lisp : Cardinal English Number to Integer

oop - 即使类和函数/方法之间没有直接联系,使用 defmethod 而不是 defun 是否合理

在 Clojure 中实现的 A* 搜索的性能

clojure - "Crossed"两个向量之间的和

clojure - 解释这个 : Lisp programs are trees of expressions

lambda - 带有 Y 组合器的列表函数不递归,为什么?

lisp - 优秀的 Common Lisp 代码示例?