当负值传递给x参数时,我一直在唠叨cond如何在函数中返回正值。我的想法是两个负数乘以产生一个正数,但这看起来很混乱,因为在函数的任何地方似乎都没有出现乘法。
有人能否详细解释为什么传递给x的负值会返回正值?
(def abs
(fn [x]
(cond (> x 0) x
(= x 0) 0
(< x 0) (- x))))
(abs -10) -> 10
代码是SICP一书中abs函数的变体,但是用Clojure编写。
亲切的问候
答案 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 ...