Clojure koans :(如果为false [])vs(如果为false [:a:b:c])

时间:2013-01-07 09:17:09

标签: clojure

本周我开始学习Clojure。我正在通过有条件的公案工作,并且不理解以下断言:

  "Some of them leave you no alternative"
  (= [] (if (> 4 3)
      []))

  "And in such a situation you may have nothing"
  (= nil (if (nil? 0)
      [:a :b :c]))

第二个做了我期望的事情 - 条件评估为假 - [编辑:实际上,它是真的,我仍然不习惯'运营商优先'推理!],if尝试返回第二个替代,找不到,因此返回nil。那么,为什么不首先返回nil?是因为一个空的结构“足够接近”nil?

1 个答案:

答案 0 :(得分:3)

因为第一个if计算结果为真(因为4确实大于3)所以else子句是无关紧要的。它返回then子句,该子句定义为等于[]