;; ;; ackerman function ;; procedure name ACK ;; ACK(X,Y) ;; == if X=0 then Y+1 ;; else if Y=0 then ACK(X-1,1) ;; else ACK(X-1, ACK(X,Y-1)) ;; calling sequence ;; ;; X on x ;; Y on y ;; non compile 11.86 sec on Sun 140 ;; compile 7.54 sec on Sun 140 start cld ldx #1 ldy #1 jsr ack brk ack cpx #0 bne xneqzero xeqzero iny tya rts xneqzero cpy #0 bne yneqzero dex ;; x <- x-1 yeqzero ldy #1 jmp ack ;; tail recursion yneqzero txa pha dey ;; y <- y-1 jsr ack ;; ack x,y-1 tay pla tax dex ;; x <- x-1 jmp ack ;; tail recursion end ;;