ocaml: phase 5.1 exception_user.ml baseline (user exception with payload, 4+5+7+10 = 26)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 47s

Defines a user exception with int payload:

  exception Negative of int

  let safe_sqrt n =
    if n < 0 then raise (Negative n)
    else <integer sqrt via while loop>

  let try_sqrt n =
    try safe_sqrt n with
    | Negative x -> -x

  try_sqrt  16  -> 4
  try_sqrt  25  -> 5
  try_sqrt -7   -> 7  (handler returns -(-7) = 7)
  try_sqrt 100  -> 10
  sum           -> 26

Tests exception declaration with int payload, raise with carry, and
try-with arm pattern-matching the constructor with payload binding.

56 baseline programs total.
This commit is contained in:
2026-05-09 12:04:42 +00:00
parent 027678f31e
commit acc8b01ddb
3 changed files with 24 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
exception Negative of int
let safe_sqrt n =
if n < 0 then raise (Negative n)
else
let g = ref 1 in
while !g * !g < n do g := !g + 1 done;
!g
let try_sqrt n =
try safe_sqrt n with
| Negative x -> -x
;;
try_sqrt 16 + try_sqrt 25 + try_sqrt (-7) + try_sqrt 100

View File

@@ -15,6 +15,7 @@
"coin_change.ml": 6,
"csv.ml": 10,
"exception_handle.ml": 4,
"exception_user.ml": 26,
"expr_eval.ml": 16,
"expr_simp.ml": 22,
"factorial.ml": 3628800,

View File

@@ -407,6 +407,13 @@ _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 — exception_user.ml baseline (user-defined
exception with int payload, 4+5+7+10 = 26). Defines `exception
Negative of int`, `safe_sqrt` raises it on negative input, and
`try_sqrt` catches with `try ... with | Negative x -> -x`. Tests
exception declaration, raise with carry-payload, try-with arm
matching the constructor and binding the payload. 56 baseline
programs total.
- 2026-05-09 Phase 5.1 — flatten_tree.ml baseline (parametric ADT
flatten, sum 1..7 = 28). Defines `type 'a tree = Leaf of 'a |
Node of 'a tree list` then `flatten` recursively expands using