我想在一个好位置创建一个带有斐波纳契的无限列表。我原来的想法只是调用然后截断返回的列表然后将它们粘在一起。我不知道如何从列表中取出第一个元素。有人能指出我正确的方向吗?
答案 0 :(得分:1)
我认为你基本上都在寻找每个素数的indexing斐波那契:
result = [fibs !! p | p <- primes]
然而,这并不是真正有效,反复扫描fibs
。最好通过从列表中反复删除一点 - 每两个素数之间的距离 - 并取得每个如此产生的列表的头部来做到这一点:
result = map head $ tail $ scanl (flip drop) fibs $ zipWith (-) primes (0:primes)
要使用基于一个索引,它是
result = [fibs !! (p-1) | p <- primes]
result = map head $ tail $ scanl (flip drop) fibs $ zipWith (-) primes (1:primes)