Concurrent Clean : Heap Full (4)
[id:lethevert:20060218:p1]で見つけたHeap Fullエラーですけど、結局、理由に思い当たりました。
というか、よくよく考えたら、非正格な評価戦略をとっていることからの自然な帰結としてのHeap Fullエラーだったということなのですが・・・
評価順序を順番に追いかけていくと、
Start = [0..]!!100000 Start = [(0+1)..]!!99999 Start = [((0+1)+1)..]!!99998 ... Start = [((..(0+1)+1..)+1)..]!!????? => 'Heap Full' error
で、頭部正格リストなら
Start = [!0..]!!|100000 Start = [!1..]!!|99999 Start = [!2..]!!|99998 ... Start = [!100000..]!!|0 Start = 100000
となり、Heap Fullエラーにならない。
でも、[0..]と書いたときに、上のように非正格に評価されるのが期待されているかというと、そんなことはないのではないかと思う。多分、頭部正格リストの[!0..]のような評価を期待することが普通なのではないだろうか?