无参数(和)返回t

时间:2015-05-26 19:55:58

标签: clojure scheme lisp common-lisp

CL和Scheme都定义(and)以返回t(或#t)而没有参数。

我正在努力理解这个的基本原理。我天真的假设是一个空集是假的,传入零参数感觉就像传递任何可能都是真的。

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

3 个答案:

答案 0 :(得分:17)

空产品是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

答案 1 :(得分:7)

这是一个更直观的答案:“和”就像一个清单:当列表中的所有内容都为真时,你已经“完成”(即真实)。假设有人给你一张清单;在这种情况下,你没有什么可以检查的,而且你很容易完成。

答案 2 :(得分:4)

这是我试图让它变得尽可能简单:and表达式是假的,如果且至少有一个参数是假的,否则它是真的。因此,如果没有论据,那就简单了。

相关问题