小编Aa'*_*shh的帖子

对于Euler 50的等效解决方案,为什么Clojure比Python慢​​10倍?

我最近开始学习Clojure并决定练习Euler问题,以获取可用数据结构并练习递归和循环.

我尝试了问题50的各种方法,但不管我做了什么,找到1000000的解决方案从未完成.在我查看其他人所做的事情之后,我猜想我所做的事情也不应该永远消失,所以我在Python中输入等效算法来查看问题是否是我对某些Clojure事物或Java设置缺乏了解.Python在10秒内完成.对于低于100000的素数,Python版本在0.5秒内完成,Clojure在5秒内完成.

我发布了专门为匹配Python代码而创建的Clojure版本.你能帮我理解为什么性能会有这么大差异吗?我应该使用unchecked-add,输入提示,原语(但在哪里?)或什么?

所以这是Clojure:

(defn prime? [n]
  (let [r (int (Math/sqrt n))]
    (loop [d 2]
      (cond
        (= n 1) false
        (> d r) true
        (zero? (rem n d)) false
        :other (recur (inc d))))))

(defn primes []
  (filter prime? (iterate inc 2)))


(defn cumulative-sum [s]
  (reduce 
    (fn [v, x] (conj v (+ (last v) x))) 
    [(first s)] 
    (rest s)))


(defn longest-seq-under [n]
  "Longest prime seq with sum under n"
  (let [ps (vec (take-while #(< % n) (primes))) ; prime …
Run Code Online (Sandbox Code Playgroud)

python comparison performance clojure

15
推荐指数
2
解决办法
3624
查看次数

标签 统计

clojure ×1

comparison ×1

performance ×1

python ×1