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'.



Reply via email to