无参数(和)返回t

ite*_*ter 7 lisp scheme clojure common-lisp

CL和Scheme都定义(and)了返回t(或#t)没有参数.

我试图理解这个的基本原理.我天真的假设是一个空集是假的,并且传入零参数感觉就像传递任何可能都是真的.

编辑:clojure遵循相同的约定.我必须缺少一些基本的Lisp假设.

soe*_*ard 17

空产品是1.原因是1是中性元素*.

如果您有2和3的乘积,然后乘以无产品,您将获得2*3*1 = 6.我们可以写

  (product (product 2 3) (product)) 
= (product 6 1) 
= 6
Run Code Online (Sandbox Code Playgroud)

相同的计算and:

  (and (and #t #t) (and)) 
= (and #t ?) 
= #t
Run Code Online (Sandbox Code Playgroud)

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

(and x #t) = x   for all boolean x
Run Code Online (Sandbox Code Playgroud)

  • 这个术语是"身份".零是加性身份,一个是乘法身份.对于逻辑和,标识是真的,对于逻辑或,标识是假的. (11认同)
  • 同样,空**或**应该是假的.通常,如果您将二元运算符概括为n-ary,则使0-ary情况返回运算符的identify元素是有用的. (6认同)

Joh*_*nts 7

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