curry gotcha
[cc1516.git] / examples / peano.spl
1 ackerman(m, n){
2 if(m ==0){
3 return n+1;
4 } else {
5 if(m>0 && n == 0){
6 return ackerman(m-1, 1);
7 } else {
8 return ackerman(m-1, ackerman(m, n-1));
9 }
10 }
11 }
12
13 hyper(n, a, b){
14 if(n == 0){ return b + 1;
15 } else { if(b == 0 && n == 1){ return a;
16 } else { if(b == 0 && n == 2){ return 0;
17 } else { if(b == 0 && n >= 3){ return 1;
18 } else { return hyper(n-1, a, hyper(n, a, b - 1));
19 }}}}
20 }
21
22 main(){
23 print("s(3)=", hyper(0, 3, 3));
24 print("3+3=", hyper(1, 3, 3));
25 print("3*3=", hyper(2, 3, 3));
26 print("3^4=", hyper(3, 3, 4));
27 print("2|3=", hyper(4, 2, 3));
28
29 print("a(0, 0)=", ackerman(0, 0));
30 print("a(0, 1)=", ackerman(0, 1));
31 print("a(0, 2)=", ackerman(0, 2));
32 print("a(0, 3)=", ackerman(0, 3));
33
34 print("a(1, 0)=", ackerman(1, 0));
35 print("a(1, 1)=", ackerman(1, 1));
36 print("a(1, 2)=", ackerman(1, 2));
37 print("a(1, 3)=", ackerman(1, 3));
38
39 print("a(2, 0)=", ackerman(2, 0));
40 print("a(2, 1)=", ackerman(2, 1));
41 print("a(2, 2)=", ackerman(2, 2));
42 print("a(2, 3)=", ackerman(2, 3));
43
44 print("a(3, 0)=", ackerman(3, 0));
45 print("a(3, 1)=", ackerman(3, 1));
46 print("a(3, 2)=", ackerman(3, 2));
47 print("a(3, 3)=", ackerman(3, 3));
48
49 print("a(4, 0)=", ackerman(4, 0));
50 /* print("a(4, 1)=", ackerman(4, 1));
51 print("a(4, 2)=", ackerman(4, 2));
52 print("a(4, 3)=", ackerman(4, 3));*/
53 }