gpt4 book ai didi

lisp - 哪个更好? : (reduce + . ..) 或(应用 + ...)?

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:17 26 4
gpt4 key购买 nike

我应该使用

(apply + (filter prime? (range 1 20)))

(reduce + (filter prime? (range 1 20)))

编辑:这是来自优化工具包的 clojure 中 prime 的来源。

(defn prime?  [n]  
(cond
(or (= n 2) (= n 3)) true
(or (divisible? n 2) (< n 2)) false
:else
(let [sqrt-n (Math/sqrt n)]
(loop [i 3]
(cond
(divisible? n i) false
(< sqrt-n i) true
:else (recur (+ i 2)))))))

最佳答案

如果你问的是性能,reduce 会好一点:

(time (dotimes [_ 1e6] (apply + (filter even? (range 1 20)))))
"Elapsed time: 9059.251 msecs"
nil

(time (dotimes [_ 1e6] (reduce + (filter even? (range 1 20)))))
"Elapsed time: 8420.323 msecs"
nil

在这种情况下大约有 7% 的差异,但 YMMV 取决于机器。

您还没有提供 prime? 函数的源代码,所以我用 even? 代替了谓词。请记住,您的运行时可能由 prime? 主导,在这种情况下,reduceapply 之间的选择就更不重要了。

如果你问哪个更“lispy”,那么我会说 reduce 实现更可取,因为你正在做的是函数式编程意义上的 reduce/fold。

关于lisp - 哪个更好? : (reduce + . ..) 或(应用 + ...)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1219185/

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