【发布时间】:2014-06-28 20:54:35
【问题描述】:
当一个负值传递给它的 x 参数时,我一直在抱怨 cond 如何在函数中返回一个正值。我的想法是两个负数相乘产生一个正数,但这似乎很令人困惑,因为函数中的任何地方似乎都没有发生乘法。
有人可以详细解释一下为什么传递给 x 的负值会返回正值吗?
(def abs
(fn [x]
(cond (> x 0) x
(= x 0) 0
(< x 0) (- x))))
(abs -10) -> 10
代码是 SICP 一书中的 abs 函数的变体,但使用 Clojure 编写。
亲切的问候
【问题讨论】:
-
仅供参考,Clojure 有 neg?,pos?和零?职能。此外,您可以使用 Java 互操作来调用 Math/abs。例如,(Math/abs -10) 返回 10。
-
请注意,Math/abs 不适用于 Clojure 数值塔中的所有数值类型。
-
第 3 行的右括号应该移到最后。编辑修复?这似乎是一个错字,而不是与您的问题有关。
-
您评论说两个负数相乘产生一个正数,但是......似乎没有相乘。乘法并不是将负数转换为正数的唯一方法。函数
(defn - ([x] ...))always 将负数转换为正数 - 反之亦然 - 无需乘法。