无参 (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
表达式为假,如果且只有至少一个它的参数为假,否则它为真。因此,如果没有参数,它是平凡的。
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
表达式为假,如果且只有至少一个它的参数为假,否则它为真。因此,如果没有参数,它是平凡的。