我想知道如何将X数量增加一个数字,而不是我曾经做过的其他语言
foo + = 0.1;
但我不知道如何在Clojure中完成
答案 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的线程宏。