无参 (and) returns t

No-argument (and) returns t

CL 和 Scheme 都定义了 (and) 到 return t(或 #t),没有参数。

我正在尝试了解这样做的理由。我天真的假设是一个空集是假的,传递零参数感觉就像传递任何可能是真的东西。

编辑:clojure 遵循相同的约定。我一定是遗漏了一些基本的 Lisp 假设。

空积为1,原因是1为*的中性元素。

如果你有 2 和 3 的乘积,然后乘以无的乘积,你将得到 2*3*1 = 6。我们可以写

  (product (product 2 3) (product)) 
= (product 6 1) 
= 6

and相同的计算:

  (and (and #t #t) (and)) 
= (and #t ?) 
= #t

我们希望空 (and) 给出一个不影响结果的值 ?。 答案是 #t 因为 #t 是中性元素。

(and x #t) = x   for all boolean x

这里有一个更直观的答案:"and" 就像一个核对清单:当清单上的所有内容都为真时,您就是 "done"(即为真)。假设有人给了你一张空的清单;在那种情况下,您没有什么可检查的,并且您已经完成了。

我试图尽可能简单地表达它:一个 and 表达式为假,如果且只有至少一个它的参数为假,否则它为真。因此,如果没有参数,它是平凡的。