next(Seq) ->
fun() -> [Seq|next(Seq+1)] end.
от
next(Seq) ->
fun() -> [Seq,next(Seq+1)] end.
Первое предлагается использовать так:
24> SeqFun0 = sequence:next(0).
#Fun<sequence.0.31154838>
25> [Seq1|SeqFun1] = SeqFun0().
[0|#Fun<sequence.0.31154838>]
26> [Seq2|SeqFun2] = SeqFun1().
[1|#Fun<sequence.0.31154838>]
Второе можно использовать так:
24> SeqFun0 = sequence:next(0).
#Fun<sequence.0.31154838>
25> [Seq1,SeqFun1] = SeqFun0().
[0,#Fun<sequence.0.31154838>]
26> [Seq2,SeqFun2] = SeqFun1().
[1,#Fun<sequence.0.31154838>]
P.S. Судя по всему, dict тоже вовсю использует "неправильные" списки.
На сколько мне известно - это микрооптимизация для ограничения
используемого объёма памяти, т.к. improper list это самая маленькая
структура для хранения пары значений (двойной кортеж и правильный
список длинны 2 занимают больше памяти)
--
Страница рассылки: http://groups.google.com/group/erlang-russian
Jabber-конференция: erl...@conference.jabber.ru
Новости: http://erlanger.ru