gpt4 book ai didi

clojure - 以下 Clojure 程序有什么问题?斐波那契的内存版本

转载 作者:行者123 更新时间:2023-12-02 16:55:35 25 4
gpt4 key购买 nike

(def fibVal {1 1 2 1})

(defn fibonacci [x]
(if (false? (get fibVal x false))
(do
(println (str "Evaluating " x))
(def fibVal (assoc fibVal x (+ (fibonacci(- x 1)) (fibonacci(- x 2)))))
(println (str x " Evaluated to " (fibVal x)))
(fibVal x)
)
(get fibVal x)
)
)

(斐波那契 5)的输出
评估5
评估4
评估3
3 评估为 2
4 评价为 3
评估3
3 评估为 2
5 评价为 5
5

3 被评估两次,而在内存版本中,它应该只被评估一次。

最佳答案

在除顶级表单之外的任何内容中使用 def 都不是线程安全的,并且不能保证在您使用它时能够正常工作。为了存储像这样变化的状态,您很可能希望使用可变状态选项之一,例如原子、引用或代理。

在这种情况下,原子将是一个不错的选择。

关于clojure - 以下 Clojure 程序有什么问题?斐波那契的内存版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30491711/

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