为什么第二个操作计算为false?"或"参数在clojure中的功能是否有所不同?如果是这样,我应该如何编写操作,以便无论0在参数中的哪个位置,它都会计算为真?
(= (or 0 1) 0) ; true (= (or 1 0) 0) ; false
Andriy Ivane.. 5
(or)(or x)(or x & next)
- 从左到右一次评估一个表达式.
如果form返回逻辑true值,则or
返回该值并且不评估任何其他表达式,否则返回最后一个表达式的值或者nil
如果是最后一个表达式falsy
(Source:Clojure documentation).
在第一个语句(= (or 0 1) 0)
中(或0 1)返回0
因为它是合乎逻辑的true
(在clojure inly nil
并且false
是假的)然后与之比较0
结果是true
.
在第二个语句中,(= (or 1 0) 0)
它返回1
并将其与之比较,0
并返回false,因为它们不相等.
(or)(or x)(or x & next)
- 从左到右一次评估一个表达式.
如果form返回逻辑true值,则or
返回该值并且不评估任何其他表达式,否则返回最后一个表达式的值或者nil
如果是最后一个表达式falsy
(Source:Clojure documentation).
在第一个语句(= (or 0 1) 0)
中(或0 1)返回0
因为它是合乎逻辑的true
(在clojure inly nil
并且false
是假的)然后与之比较0
结果是true
.
在第二个语句中,(= (or 1 0) 0)
它返回1
并将其与之比较,0
并返回false,因为它们不相等.