Skip to content

Commit d47e238

Browse files
committed
fix ackermann
1 parent 1f6d199 commit d47e238

File tree

3 files changed

+11
-10
lines changed

3 files changed

+11
-10
lines changed

examples/ackermann.lisp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77
(add1 n)
88
(if (zero? n)
99
(ackermann (sub1 m) one)
10-
(ackermann (sub1 m) (ackermann m n)))))
10+
(ackermann (sub1 m) (ackermann m (sub1 n))))))
11+
12+
;; TODO fail:
13+
14+
;; ackermann
1115

1216
(define ackermann-wrap
1317
(lambda (ackermann)
@@ -16,7 +20,7 @@
1620
(add1 n)
1721
(if (zero? n)
1822
(ackermann (sub1 m) one)
19-
(ackermann (sub1 m) (ackermann m n)))))))
23+
(ackermann (sub1 m) (ackermann m (sub1 n))))))))
2024

2125
(assert-equal ackermann ackermann)
2226
(assert-equal ackermann (ackermann-wrap ackermann))

examples/ackermann.test.lisp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
1-
(import zero one two three "nat-church.lisp")
1+
(import zero one two three four five "nat-church.lisp")
22
(import ackermann ackermann-wrap "ackermann.lisp")
33

44
(assert-equal (ackermann zero zero) one)
55
(assert-equal (ackermann one zero) two)
66
(assert-equal (ackermann zero one) two)
7+
(assert-equal (ackermann one one) three)
8+
(assert-equal (ackermann one two) four)
9+
(assert-equal (ackermann two one) five)
710

811
ackermann-wrap
912

1013
;; TODO fail:
1114

1215
;; ackermann
1316
;; (ackermann-wrap ackermann)
14-
15-
;; TODO fail:
16-
17-
;; (ackermann one one)
18-
;; (ackermann one two)
19-
;; (ackermann two one)

examples/ackermann.test.lisp.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
(lambda (ackermann m n) (m (lambda (t f) t) (lambda (x t f) f) (lambda (base step) (step (n base step))) (n (lambda (t f) t) (lambda (x t f) f) (ackermann (m (lambda (f) (f (lambda (base step) base) (lambda (base step) base))) (lambda (x f) (f (x (lambda (car cdr) cdr)) (lambda (base step) (step (x (lambda (car cdr) cdr) base step))))) (lambda (car cdr) car)) (lambda (base step) (step base))) (ackermann (m (lambda (f) (f (lambda (base step) base) (lambda (base step) base))) (lambda (x f) (f (x (lambda (car cdr) cdr)) (lambda (base step) (step (x (lambda (car cdr) cdr) base step))))) (lambda (car cdr) car)) (ackermann m n)))))
1+
(lambda (ackermann m n) (m (lambda (t f) t) (lambda (x t f) f) (lambda (base step) (step (n base step))) (n (lambda (t f) t) (lambda (x t f) f) (ackermann (m (lambda (f) (f (lambda (base step) base) (lambda (base step) base))) (lambda (x f) (f (x (lambda (car cdr) cdr)) (lambda (base step) (step (x (lambda (car cdr) cdr) base step))))) (lambda (car cdr) car)) (lambda (base step) (step base))) (ackermann (m (lambda (f) (f (lambda (base step) base) (lambda (base step) base))) (lambda (x f) (f (x (lambda (car cdr) cdr)) (lambda (base step) (step (x (lambda (car cdr) cdr) base step))))) (lambda (car cdr) car)) (ackermann m (n (lambda (f) (f (lambda (base step) base) (lambda (base step) base))) (lambda (x f) (f (x (lambda (car cdr) cdr)) (lambda (base step) (step (x (lambda (car cdr) cdr) base step))))) (lambda (car cdr) car)))))))

0 commit comments

Comments
 (0)