ERLANG,地图无限列表

时间:2015-04-20 18:33:41

标签: dictionary erlang infinite

我想写一张无限列表的地图。 这就是我到目前为止所做的:

-module(map).
-export([ints/0,take/2,map/2, double_int/1]).

ints() -> ints_from(0).

take(0, _)         -> [];
take(N, [H|LazyT]) -> [H | take(N-1, LazyT())].

double_int(N) -> 2 * N.

map(_, []) -> [];
map(F, [H | T]) -> [F(H) | map(F, T())].

ints_from(N) -> [N | fun () -> ints_from(N+1) end].

问题是,通过电话

> L = map:ints().
[0|#Fun<map.0.104601022>]
> R = map:map(fun map:double_int/1, L).

我得到一个永无止境的过程。我猜,地图正在整个无限列表中进行,因此永远不会结束。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

由于您将惰性列表表示为尾部为函数的列表,因此您对map的定义也需要返回这样的值:

map(_, []) -> [];
map(F, [H | T]) -> [F(H) | fun() -> map(F, T()) end].