Dictionary ERLANG,无限列表的映射

Dictionary ERLANG,无限列表的映射,dictionary,erlang,infinite,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

我想写一张无限列表的地图。 到目前为止,我已经做到了:

-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).
>L=map:ints()。
[0 |#乐趣]
>R=map:map(有趣的map:double_int/1,L)。
我有一个永无止境的过程。我猜,地图正在整个无限列表中前进,因此永远不会结束


我做错了什么?

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

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

什么是
ints\u from
?ints\u from(N)->[N | fun()->ints\u from(N+1)end]的定义。非常感谢。我认为在列表中返回一个函数就足够了。但事实并非如此。我现在更了解无限列表了。