小编Juf*_*ufi的帖子

为什么这个看似基本的 clojure 函数这么慢?

我是 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

3
推荐指数
1
解决办法
1050
查看次数

标签 统计

clojure ×1