ocaml: phase 5.1 ackermann.ml baseline (ack(3, 4) = 125)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 24s

Classic Ackermann function:

  let rec ack m n =
    if m = 0 then n + 1
    else if n = 0 then ack (m - 1) 1
    else ack (m - 1) (ack m (n - 1))

ack(3, 4) = 125, expanding to ~6700 evaluator frames — a useful
stress test of the call stack and control transfer. Real OCaml
evaluates this in milliseconds; ours takes ~2 minutes on a
contended host but completes correctly.

40 baseline programs total.
This commit is contained in:
2026-05-09 08:50:12 +00:00
parent 095bb62ef9
commit 70b9b4f6cf
3 changed files with 16 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
let rec ack m n =
if m = 0 then n + 1
else if n = 0 then ack (m - 1) 1
else ack (m - 1) (ack m (n - 1))
;;
ack 3 4

View File

@@ -1,4 +1,5 @@
{ {
"ackermann.ml": 125,
"anagrams.ml": 3, "anagrams.ml": 3,
"bag.ml": 3, "bag.ml": 3,
"balance.ml": 3, "balance.ml": 3,

View File

@@ -407,6 +407,13 @@ _Newest first._
binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree * binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree *
'a tree`) with insert + in-order traversal. Tests parametric ADT, 'a tree`) with insert + in-order traversal. Tests parametric ADT,
recursive match, List.append, List.fold_left. recursive match, List.append, List.fold_left.
- 2026-05-09 Phase 5.1 — ackermann.ml baseline (Ackermann function,
ack(3, 4) = 125). Three-arm recursion: m=0 base, n=0 reduces m,
else doubly-nested recursion `ack (m-1) (ack m (n-1))`. ack(3, 4)
expands to ~6700 frames in our spec-level evaluator, so a useful
exercise of the call stack and control transfer. Real OCaml
evaluates the same in milliseconds; ours takes ~2 minutes on a
contended host but completes correctly. 40 baseline programs total.
- 2026-05-09 Phase 5.1 — rpn.ml baseline (Reverse Polish Notation - 2026-05-09 Phase 5.1 — rpn.ml baseline (Reverse Polish Notation
evaluator using Stack). Walks the token list with List.iter, pushes evaluator using Stack). Walks the token list with List.iter, pushes
ints onto the stack, on operator tokens pops two operands and ints onto the stack, on operator tokens pops two operands and