当负值传递给这个abs函数时,Clojure如何产生正值?

时间:2014-06-28 20:54:35

标签: clojure scheme sicp

当负值传递给x参数时,我一直在唠叨cond如何在函数中返回正值。我的想法是两个负数乘以产生一个正数,但这看起来很混乱,因为在函数的任何地方似乎都没有出现乘法。

有人能否详细解释为什么传递给x的负值会返回正值?

(def abs
   (fn [x]
      (cond (> x 0) x
            (= x 0) 0 
            (< x 0) (- x))))

(abs -10) -> 10

代码是SICP一书中abs函数的变体,但是用Clojure编写。

亲切的问候

1 个答案:

答案 0 :(得分:9)

当数字为负数(< x 0)时,我们将其否定(- x),以获得相同幅度的正数。如果你愿意的话,可以将否定乘以-1乘以。

(doc -)
-------------------------
clojure.core/-
([x] [x y] [x y & more])
  If no ys are supplied, returns the negation of x, else ...