7

我想知道如何用 X 增加一个数字,用我以前做的其他语言

富 += 0.1;

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

4

2 回答 2

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))

我建议您从阅读Clojure 的基本原理开始。

于 2013-03-26T20:59:24.810 回答
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 的线程宏。

于 2013-03-26T23:54:57.523 回答