読者です 読者をやめる 読者になる 読者になる

無限リスト

Erlang Python

 本家のProgramming Examplesを見ながら練習。

-module(lazy).
-export([ints_from/1]).

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


 関数を返す関数を定義し、その上で、次のように使う、と。hdはリストの最初の要素を、tlは最後の要素を返す関数。

18> X = lazy:ints_from(1).
#Fun<lazy.0.49775755>
19> hd(X()).
1
20> Y = tl(X()).
#Fun<lazy.0.49775755>
21> hd(Y()).
2


 うーん、なんだか面倒。この辺はPythonとか、Haskellの方が分かり易いかも。

>>> def ints_from(n):
...     while 1:
...             yield n
...             n += 1
... 
>>> xx = ints_from(1)
>>> xx.next()
1
>>> xx.next()
2