ocaml: phase 5.1 json_pretty.ml baseline (recursive ADT to string, len = 24)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 23s

Defines a JSON-like algebraic data type:

  type json =
    | JNull
    | JBool of bool
    | JInt of int
    | JStr of string
    | JList of json list

Recursively serialises to a string via match-on-constructor, then
measures the length:

  JList [JInt 1; JBool true; JNull; JStr 'hi'; JList [JInt 2; JInt 3]]
  -> '[1,true,null,"hi",[2,3]]'   length 24

Exercises:
  - five-constructor ADT (one nullary, three single-arg, one list-arg)
  - recursive match
  - String.concat ',' (List.map to_string xs)
  - string-cat with embedded escaped quotes

34 baseline programs total.
This commit is contained in:
2026-05-09 07:41:01 +00:00
parent 75a1adbbd5
commit 9a8bbff5b2
3 changed files with 29 additions and 0 deletions

View File

@@ -16,6 +16,7 @@
"frequency.ml": 5,
"fizzbuzz.ml": 57,
"list_ops.ml": 30,
"json_pretty.ml": 24,
"lambda_calc.ml": 7,
"levenshtein.ml": 11,
"memo_fib.ml": 75025,

View File

@@ -0,0 +1,20 @@
type json =
| JNull
| JBool of bool
| JInt of int
| JStr of string
| JList of json list
let rec to_string j =
match j with
| JNull -> "null"
| JBool b -> if b then "true" else "false"
| JInt n -> string_of_int n
| JStr s -> "\"" ^ s ^ "\""
| JList xs ->
"[" ^ String.concat "," (List.map to_string xs) ^ "]"
;;
let j = JList [JInt 1; JBool true; JNull; JStr "hi"; JList [JInt 2; JInt 3]] in
String.length (to_string j)

View File

@@ -407,6 +407,14 @@ _Newest first._
binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree *
'a tree`) with insert + in-order traversal. Tests parametric ADT,
recursive match, List.append, List.fold_left.
- 2026-05-09 Phase 5.1 — json_pretty.ml baseline (recursive ADT
serialization). Defines a JSON-like ADT (JNull / JBool / JInt /
JStr / JList) and recursively pretty-prints to a string, then
measures length. Tests algebraic data types with five constructors
(one nullary, three single-arg, one list-arg), recursive `match`
with five arms, `String.concat "," (List.map ...)`, and string
concatenation. `[1,true,null,"hi",[2,3]]` → 24 chars. 34 baseline
programs total.
- 2026-05-09 Phase 5.1 — shuffle.ml baseline (Fisher-Yates with
deterministic Random.init seed). In-place swap loop using `for i =
n - 1 downto 1` and `a.(i) <- a.(j)`. Sum is invariant under