[Gauche-devel-jp] Re: It's a bad lazy eval on 32bit machine, isn't it?

Back to archive index

Shiro Kawai shiro****@lava*****
2004年 2月 23日 (月) 12:19:36 JST


From: katsutoshi ito <itou.****@rens*****>
Subject: [Gauche-devel-jp] It's a bad lazy eval on 32bit machine, isn't it?
Date: Mon, 23 Feb 2004 12:06:24 +0900

> SICP にならって (pattern-ref obj n) って感じでこのストリームの n 番目の要素を
> 取り出せるようにして、
> 
> (define p (generate-pattern 100)) ;; 2^100 のパターンのストリーム
> (pattern-ref p 1) => (0 0 0 .... 0) ;; OK
> (pattern-ref p 2) => (0 0 0 .... 1) ;; OK
> (pattern-ref p (^ 2 99)) => ??? ;; 2^99 番目のパターンを取得。。。

これだと、変数pがlazy streamの頭を掴んでいるので、計算の途中結果が
gcされませんよね。だからlazyであってもメモリ不足になります。

メモリを気にするなら、lazy listの頭を掴まないように気をつけねば
ならないんですが、それがわりと難しいです。
srfi-40 (A Library of Streams) のMLでも議論になっていました。

OSが固まったのはgoshがbrkしまくったから+gcが走りまくったからかな?
gcが走ってる間は通常のシグナルもキューイングされるだけですし…
ただ、全く応答無しってのは不思議っすね。

ちなみにxのn乗は(expt x n)でできます (R5RS)。

--shiro




Gauche-devel-jp メーリングリストの案内
Back to archive index