SPOILER ALERT:此问题涉及4clojure.com问题。如果你是像我一样的Clojure新手,你可能想先自己尝试一下。
我成功地回答了这个问题(#68),但只是在犯了一个我仍不确定为什么是错的错误之后。
以下是问题:
(= __
(loop [x 5
result []]
(if (> x 0)
(recur (dec x) (conj result (+ 2 x)))
result)))
我的初步答案是[6 5 4 3 2]
,而接受的答案是[7 6 5 4 3]
。
我不完全理解它,因为(dec x)
在 (conj result (+ 2 x))
之前,并且它们都在循环中同样嵌套。我认为因为减量似乎发生在联合之前,结果向量将以递减的x加2开始。但它并没有那样发生。这显然是非常基本的东西,但也许有人可能会解释它是怎么回事?
谢谢。
答案 0 :(得分:4)
clojure和immutable中的变量(大多数情况下,无论如何)。 var countries = [1, "DK", 2, "USA", 3, "Sweden"];
var languages = [2, "English", 1, "Danish", 3, "Swedish"];
var population = [3, 8000000, 1, 6000000, 2, 3000000000];
实际上并未减少当前范围内的// In USA people speak English and there live 300000000 people
// In DK people speak Danish and there live 6000000 people
// In Sweden people speak Swedish and there live 8000000 people
。它返回 (dec x)
的结果,然后将其用作重复的参数,您可以将其视为x
“函数的另一个调用”。因此(dec x)
在此范围内未发生变化。 loop
使用具有相同旧值的相同变量x
。