我是 clojure 的新手,作为快速练习,我编写了一个函数,该函数应该遍历斐波那契数列,直到它超过 999999999 10 亿次(也做了一些额外的数学运算,但不是很重要)。我在 Java 中写了一些类似的东西,虽然我知道 Clojure 本质上比 Java 慢,但 java 程序花了 35 秒才能完成,而 Clojure 则花了 27 分钟,我发现这非常令人惊讶(考虑到 Nodejs 是大约8分钟内就能完成)。我使用 repl 编译了该类,并使用此 Java 命令运行它java -cp `clj -Spath` fib。真的不确定为什么这么慢。
(defn fib
[]
(def iter (atom (long 0)))
(def tester (atom (long 0)))
(dotimes [n 1000000000]
(loop [prev (long 0)
curr (long 1)]
(when (<= prev 999999999)
(swap! iter inc)
(if (even? @iter)
(swap! tester + prev)
(swap! tester - prev))
(recur curr (+ prev curr)))))
(println (str …Run Code Online (Sandbox Code Playgroud) clojure ×1