我正在尝试学习Clojure中的函数式编程。许多函数式编程教程都从不可变性的好处开始讲起,其中一个常见的例子是命令式语言中的循环变量。在这方面,Clojure的loop-recur
与它们有何不同?例如:
(defn factorial [n]
(loop [curr-n n curr-f 1]
(if (= curr-n 1)
curr-f
(recur (dec curr-n) (* curr-f curr-n)))))
在命令式语言中,curr-n
和curr-f
这两个可变值与循环变量类似,不是吗?
recur
视为将名称重新绑定到新值上——这些值仍然是不可变的,如果你将其中一个值存储在某个地方(比如原子中),它不会因为recur
恰好重新绑定了原始值而改变。 - Charles Duffy