aboutsummaryrefslogtreecommitdiff
path: root/examples/ack.cff
blob: 233abc29f49273ec60a799dcae30b05bed760aac (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import "libc.hff";

fn ack(m uint, n uint) uint {
   if m == 0 { return n + 1; }
   if n == 0 { return ack(m - 1, 1); }
   return ack(m - 1, ack(m, n - 1));
}

extern fn main() void {
   for let m = 0; m <= 4; ++m {
      for let n = 0; n < 6 - m; ++n {
         printf("A(%u,%u) = %u\n", m, n, ack(m, n));
      }
   }
}