为什么clojure运算符不匹配正常的逻辑运算?

ric*_*rde 1 clojure

有人请解释clojure不寻常的操作员吗?

为什么or返回第一个为真或最后为假?为什么and首先返回false或者为true?

他们为什么不回来truefalse

Tim*_*ley 5

方便.Clojure拥抱虚假(nil和false都是假的)和truthy(其他一切).

(or a b c)
Run Code Online (Sandbox Code Playgroud)

比比较方便

(cond (not (nil? a)) a (not (nil? b)) b (not (nil? c)))
Run Code Online (Sandbox Code Playgroud)

将nil视为false会使表达式更加简洁,并且返回值会使函数和条件更易于组合.例如

(if a b c)
Run Code Online (Sandbox Code Playgroud)

在命令式语言中将不会返回任何结果.在Clojure中,它返回一个值,因此您可以使用其他表达式组合表达式.

(or (if a b c) (if d e f))
Run Code Online (Sandbox Code Playgroud)

类似于或者和它们在返回值而不是布尔值时更容易与语言抽象相结合.

(if a (or b c) d)
Run Code Online (Sandbox Code Playgroud)

它真的归结为如果你想要真/假或真或假.Truthy/falsey允许更简洁的表达,并且是Clojure的选择.