aboutsummaryrefslogtreecommitdiff
path: root/examples/ackermann.c
blob: 08acd4d2f95543a00757aee56e510e3022d0d378 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <csxbind.h>
#include <stdio.h>


int main()
{
    init();
    char *m = N("m");
    char *n = N("n");
    char *ackermann = N("ackermann");
    printf("%d\n", *(int *)R(L(_do,
      L(set, ackermann, L(fn, L(m, n, 0),
        L(_if,
          L(same, m, I(0), 0), L(_plus, n, I(1), 0),
          L(same, n, I(0), 0), L(ackermann, L(_plus, m, I(-1), 0), I(1), 0),
          L(ackermann,
            L(_plus, m, I(-1), 0),
            L(ackermann, m, L(_plus, n, I(-1), 0), 0),
          0),
        0),
      0), 0),
      L(ackermann, I(3), I(7), 0),
    0)));
    return 0;
}