在Clojure中你可以写:
(cond (= 1 2) 1
:else 5)
Run Code Online (Sandbox Code Playgroud)
在Scheme中,等价物将是:
(cond ((= 1 2) 1)
(else 5))
Run Code Online (Sandbox Code Playgroud)
该:else 5语法不作为是一致的(else 5).在Clojure中以这种看似不一致的方式实现else语法的原因是什么?
mik*_*era 36
:else 这实际上是一个聪明的伎俩:
cond期望条件/值对 - 和:else只是Clojure中"truthy"的值,因此它保证条件满足.(除了null或false之外的任何东西都算作"真相").如果你喜欢,你可以同样使用":donkey"作为保证的真实条件值.所以它真的只是一种适用于cond表达的惯例,对人类读者来说很有意义.
Joo*_*aat 27
我认为(else 5)不太一致.(cond ...)参数表示为条件 - 值对.:else value是一致的,因为:else它只是一种惯例 - 它起作用,因为:else它只是一个总是如此的表达式.根本没有特别的规则:else.