如何将两个函数的结果合并到Haskell中的列表中?

时间:2018-01-24 20:17:34

标签: haskell

我想在一个好位置创建一个带有斐波纳契的无限列表。我原来的想法只是调用然后截断返回的列表然后将它们粘在一起。我不知道如何从列表中取出第一个元素。有人能指出我正确的方向吗?

1 个答案:

答案 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)