【发布时间】:2015-06-28 06:37:10
【问题描述】:
我有一个包含无限列表的任务。
我必须为无限列表编写一个 zipWith/3 - 完成
我必须使用这个 zipWith/3 来创建一个无限的带有 fib/0 的斐波那契数列 - 问题
我必须写 fibs(N) 从 fib() 中取出前 N 个元素 - 完成
这是我目前所拥有的:
-module(zipWith).
-export([take/2, zipWith/3, fib/0]).
take(0, _) -> [];
take(N, [H|LazyT]) -> [H | take(N-1, LazyT())].
zipWith(F, [H1|L1], [H2|L2]) -> [F(H1, H2) | fun() -> zipWith(F, L1(), L2()) end].
fib() -> ...
fib(L) -> zipWith(fun(X,Y) -> X + Y end, L(), tl(L())).
fibs(N) -> take(N, fib()).
我知道 fib/1 应该是这样的(我很确定 - 纠正我,如果我弄错了)。获取列表本身和没有头部的列表。因此,如果 [0,1,...] zipWith(add,[0,1,...],[1,...]) 导致最后两个数字相加。但是无论我尝试作为这个 fib()->... 的开头,都会导致错误。 我想以某种方式表达它: fib() -> fib([[0,1] ++ fun() -> ... end]...)
我不知何故想用 [0,1,fun()...] 开始 fib/1,但不知道如何让列表开始。
提前感谢您的建议
【问题讨论】:
标签: list erlang fibonacci infinite