我想分享一个尾递归的斐波那契数列生成器,可以正常工作:
请原谅我将整个实现放在一行中,因为我正在使用GHCi,还没有学会如何将其放入文件并运行(我还没有达到那里)。我想知道的是这个调用:
let {
fibo :: Integral x => [x]->x->x->x->[x]
fibo l x y 0 = l
fibo l x y n = fibo (l ++ [y+x] ++ [y+x+y]) (x+y) (y+x+y) (n-1)
}
请原谅我将整个实现放在一行中,因为我正在使用GHCi,还没有学会如何将其放入文件并运行(我还没有达到那里)。我想知道的是这个调用:
fibo [0, 1] 0 1 5
可以改进的地方。我不想传递初始列表,其中包含0和1,然后再传递带有限制的0和1。我相信实现可以改变。有哪些改变可以进行?
(++)
在其第一个参数上是线性的。但我猜这不是问题的一部分。 - Joachim Breitnerfibs = 0:1:zipWith(+)fibs(tail fibs)
或其带有scanl
或unfoldr
变体之一。请参见此HaskellWiki页面以获取一堆实现。 - Luis Casillas