home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / m / me_cd25.zip / MC2MUTT.ZIP / ACKERMAN.MUT next >
Lisp/Scheme  |  1992-11-09  |  829b  |  43 lines

  1. ;; Note: this is too recursive for the default MM [op] stack(s).
  2.  
  3.     ;; Ackerman's function
  4.     ;; (A 0 0) => 1
  5.     ;; (A 0 1) => 2
  6.     ;; (A 0 2) => 3
  7.     ;; (A 1 0) => 2
  8.     ;; (A 1 1) => 3
  9.     ;; (A 3 6) => 509
  10. (defun A (int x y)
  11. {
  12.   (case
  13.     (== x 0) (+ y 1)
  14.     (== y 0) (A (- x 1) 1)
  15.     TRUE (A (- x 1) (A x (- y 1)))
  16.   )
  17. })
  18.  
  19. (const NUMBER    0x03)
  20. (defun MAIN
  21. {
  22.   (msg (A (convert-to NUMBER (ask "x = "))(convert-to NUMBER (ask "y = "))))
  23. })
  24.  
  25.  
  26. ;     /* Ackerman's function in C */
  27. ;    /* Example "ack 3 6" => 509 */
  28. ; main(argc,argv) char *argv[];
  29. ; {
  30. ;   int x,y, i;
  31.  
  32. ;   x = atoi(argv[1]); y = atoi(argv[2]);
  33. ;   i = A(x,y);
  34. ;   printf("ackerman's(%d, %d): %d\n", x,y,i);
  35. ; }
  36.  
  37. ; A(x,y) int x,y;
  38. ; {
  39. ;     if (x == 0) return (++y);
  40. ;     if (y == 0) return (A(--x,1));
  41. ;     return (A(--x,A(x,--y)));
  42. ; }
  43.