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