回答问题

以下是我在 Clojure 和 Python 中找到的懒惰无限斐波那契数序列的最佳实现:

Clojure:

(def fib-seq (lazy-cat [0 1]
 (map + fib-seq (rest fib-seq))))

示例用法:

 (take 5 fib-seq)

Python:

def fib():
 a = b = 1
 while True:
  yield a
  a,b = b,a+b

示例用法:

for i in fib():
  if i > 100:
    break
  else:
    print i

显然 Python 代码更加直观。

我的问题是: Clojure 中是否有更好(更直观和简单)的实现?

编辑

我在Clojure Prime Numbers打开一个后续问题

Answers

我喜欢:

(def fibs 
  (map first 
       (iterate 
           (fn [[ a, b       ]]  
                [ b, (+ a b) ]) 
           [0, 1])))     

这似乎与 python/generator 版本有一些相似之处。

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐