Hi! Juhani Viheräkoski <moonsh...@kapsi.fi> writes:
> With recent changes in guile vm there are lots on improvements on the > Gambit benchmarks. Improvements compared to what? > In the worst case some test run 10% slower Slower than what? > but there are huge wins in testcases involving vectors offsetting > this. Oh, that's cool, but it feels like we're slightly cheating on these. ;-) > (define (ack m n) > (cond ((= m 0) (+ n 1)) > ((= n 0) (ack (- m 1) 1)) > (else (ack (- m 1) (ack m (- n 1)))))) > > (ack 3 9) This is not tail-recursive (because of the nested `ack' call in the `else' clause), which is why it can lead to a stack overflow. I'm too stupid to compute the maximum "depth" of the call graph, but it looks like this: (ack 3 9) (ack 3 8) <--- X (ack 3 7) ... (ack 3 0) (ack 2 0) ... (ack 0 0) (ack 2 X) (ack 2 (- X 1)) <--- Y ... (ack 1 Y) (ack 1 (- Y 1)) ... Thanks, Ludo'.