如何在Clojure中增加一个数字?

时间:2013-03-26 20:56:16

标签: clojure

我想知道如何将X数量增加一个数字,而不是我曾经做过的其他语言

foo + = 0.1;

但我不知道如何在Clojure中完成

2 个答案:

答案 0 :(得分:9)

变量在Clojure中是不可变的。因此,您不应该尝试更改foo的值,而是“创建”新的foo:

(def foo2 (+ foo 0.1))

...或者,如果在循环中,则重复使用新值:

(loop [foo 5.0]
  (when (< foo 9)
    (recur (+ foo 0.1))))

...或者,如果foo是一个原子,swap!它带有一个新值:

(def foo (atom 5.0))
(swap! foo (partial + 0.1))

我建议您先阅读the rationale of Clojure

答案 1 :(得分:4)

Blacksad的答案涵盖了定义变量,因此我只想添加其他范围,您可能希望从另一个值增加一个值:

在函数的本地范围内:

user> (defn my-function [x]
        (let [y (inc x)
              z (+ x y)]
          [x y z]))
#'user/my-function
user> (my-function 4)
[4 5 9]

并且如果您想逐步建立一个值以使过程更加清晰:

user> (defn my-function [x]
        (let [y (inc x)
               z (+ x y)
               z (+ z 4)
               z (* z z)]
          [x y z]))
#'user/my-function
user> (my-function 4)
[4 5 169]

这可以使过程更加流畅,虽然它不是“获取变量的方法”,并且实际上仅在有限的上下文中有用。这种模式用于clojure.core的线程宏。