gpt4 book ai didi

clojure - Clojure 中的 i++ 等价物

转载 作者:行者123 更新时间:2023-12-04 00:06:15 26 4
gpt4 key购买 nike

我是 Clojure 的新手。

在 Clojure 中是否有增加变量的快捷方式?

在许多语言中,这将起作用:

i++;
i += 1;

在 Clojure 中,我可以这样做:
(def i 1)    
(def i (+ i 1))

这是在 Clojure 中增加绑定(bind)的正确方法吗?

有什么捷径吗?

最佳答案

你不能分配给 i clojure 或任何其他 lisp 中的新值,因为它很重要。 i will 在当前上下文中将只有一个值。 (inc i)返回一个新值,该值可能绑定(bind)也可能不绑定(bind)到新的局部变量。

这就是为什么在 lisp 语言中,尾递归优化如此重要的原因;因为模拟循环的唯一方法是使用递归,在每个函数调用中,索引都有一个新值。尾递归优化通过将递归转换为平坦的旧循环来避免用非常长的循环耗尽堆栈

clojure 保证使用 recur 进行尾递归优化。函数再次调用相同的函数。如果无法进行尾递归优化,recur将给出编译时错误

编辑 这是不变性习语的本质。不变性和函数式编程之间有很强的联系。原因是函数式编程意味着“没有副作用的代码”,或者更准确地说,函数在计算中的唯一影响是通过它的返回值。实现这一点的一种方法是在上述意义上默认使参数和变量不可变。虽然现在从其他海报中你意识到有一些方法可以解决这个问题,而不是依赖于 clojure 中的不变性

关于clojure - Clojure 中的 i++ 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4513078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com