# [plt-scheme] Re: any knows why Ackermann function definition in sicp is different from that in wikipedia ?

Thankx both of you very much!
hend... at topoi.pooq.com 写道：
>* On Sat, Sep 22, 2007 at 08:46:21PM -0700, orzz wrote:
*>*
*>* I've never seen this one before:
*>*
*>* > (define (A x y)
*>* > (cond ((= y 0) 0)
*>* > ((= x 0) (* 2 y))
*>* > ((= y 1) 2)
*>* > (else (A (- x 1)
*>* > (A x (- y 1))))))
*>* >
*>* > http://en.wikipedia.org/wiki/Ackermann_function
*>*
*>* This is more like the one I'm familiar with:
*>*
*>* >
*>* > A(m,n)=
*>* > n+1 if m = 0
*>* > A(m-1,1) if m > 0 and n = 0
*>* > A(m-1,A(m,n-1)) if m > 0 and n > 0
*>* >
*>* > (define (A-WIKI m n)
*>* > (cond ((= m 0) (+ n 1))
*>* > ((= n 0) (A-WIKI (- m 1) 1))
*>* > (else (A-WIKI (- m 1)
*>* > (A-WIKI m (- n 1))))))
*>* >
*>* > all that confuse me.anyone give me a hand.thx!
*>*
*>* So the wikipedia matches my recollection. And, I suspect, most
*>* mathematicians', otherwise someone would have changed it.
*>*
*>* The whole point of the ackermann function is that if you tabulate it,
*>* each row iterates the previous one. This eentually gives larger
*>* growth rates. And going down the diagonal, you get a growth rate
*>* greater than you can get with any finite number of primitive
*>* recursions (e.g., Fortran DO-loops).
*>*
*>* I haven't looked in detail, but I think both of the ones you've
*>* presented satisfy this purpose.
*>*
*>* I'm told that Ackermann's original function wasn't any of these,
*>* though. The one that's well-known and used nowadays is presumably a
*>* refined version of what he originally proposed. His was, I believe,
*>* a three-argument function. With the first argument n = 0, (or did he
*>* start with one) it gave addition; with n = 1, it gave multiplication,
*>* with n = 2, exponentiation, and so on.
*>*
*>* -- hendrik
*>*
*>* >
*>* > _________________________________________________
*>* > For list-related administrative tasks:
*>* > http://list.cs.brown.edu/mailman/listinfo/plt-scheme
*>* _________________________________________________
*>* For list-related administrative tasks:
*>* http://list.cs.brown.edu/mailman/listinfo/plt-scheme
*