gpt4 book ai didi

clojure - 清理Clojure函数

转载 作者:行者123 更新时间:2023-12-04 16:26:21 25 4
gpt4 key购买 nike

来自命令式编程语言,我试图围绕 Clojure 进行思考,希望将其用于多线程功能。
来自4Clojure的问题之一是编写一个函数来生成一个长度为 N 的斐波那契数列列表,其中 N > 1。我编写了一个函数,但鉴于我的背景有限,我想了解一下这是否是 Clojure 的最佳处理方式.代码如下:

(fn fib [x] (cond 
(= x 2) '(1 1)
:else (reverse (conj (reverse (fib (dec x))) (+ (last (fib (dec x))) (-> (fib (dec x)) reverse rest first))))
))

最佳答案

最惯用的“函数式”方法可能是创建一个无限懒惰的斐波那契数列,然后提取前 n 个值,即:

(take n some-infinite-fibonacci-sequence)

以下链接有一些非常有趣的方法可以沿着这些线生成斐波那契数列:

http://en.wikibooks.org/wiki/Clojure_Programming/Examples/Lazy_Fibonacci

最后,这是另一个值得考虑的有趣实现:
 (defn fib [n]
(let [next-fib-pair (fn [[a b]] [b (+ a b)])
fib-pairs (iterate next-fib-pair [1 1])
all-fibs (map first fib-pairs)]
(take n all-fibs)))


(fib 6)
=> (1 1 2 3 5 8)

它并不像它应有的那样简洁,但很好地展示了使用 Clojure 的解构、惰性序列和高阶函数来解决问题。

关于clojure - 清理Clojure函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7396295/

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