Concurrent Clean : Heap Full (3)
Heap Fullについて、MLに質問してみました。
それはそうと、以下のように頭部尾部正格リストを使って書いてみたところ、
reduce :: !(b a -> b) !b [!(.u -> (a, .u))!] !.u -> (!b, !.u) reduce _ b [!!] u = (b, u) reduce f b [!x:xs!] u # (a, u) = x u = reduce f (f b a) xs u monte_carlo :== repeatn // Repeatn cesaro_test r # (r1, r) = nextRand r # (r2, r) = nextRand r = (1 == gcd r1 r2, r) estimate_pi trials # r = mkRandomInt # (frac, u) = (\(x,y) u = (x/y,u)) $$ reduce (\(x,y) b = (if b (x+1.0) x, y+1.0)) (0.0,0.0) [!a \\ a <- (monte_carlo trials cesaro_test)!] // monte_carlo trials cesaro_test r = sqrt (6.0 / frac) Start = estimate_pi 1000000
Stack overflow.しました。ちなみに、コメントのように書いたら、Heap Fullです。
もしかして、正格評価されて、リストが展開されてしまうからHeap Fullになってるのかな?
ABCコードを読んでみようか・・・