ocaml: phase 5.1 wildcard_match.ml baseline (* / ? matcher, 6/18 match)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 23s

Recursive wildcard matcher:

  let rec is_match s i p j =
    if j = String.length p then i = String.length s
    else if p.[j] = '*' then
         is_match s i p (j + 1)             (* * matches empty   *)
      || (i < String.length s && is_match s (i + 1) p j)  (* * eats char *)
    else
      i < String.length s
      && (p.[j] = '?' || p.[j] = s.[i])
      && is_match s (i + 1) p (j + 1)

Patterns vs texts:
  a*b      | aaab abc abxyz xy xyz axby   -> 1 match
  ?b*c     | aaab abc abxyz xy xyz axby   -> 1 match
  *x*y*    | aaab abc abxyz xy xyz axby   -> 4 matches
                                  total   = 6

Tests deeply nested short-circuit && / ||, char equality on
pattern bytes, doubly-nested List.iter cross product.

173 baseline programs total.
This commit is contained in:
2026-05-11 00:52:42 +00:00
parent 0a3f02d636
commit 6c77dec495
3 changed files with 36 additions and 0 deletions

View File

@@ -407,6 +407,17 @@ _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-11 Phase 5.1 — wildcard_match.ml baseline (recursive `*`
/`?` wildcard matcher; over 3×6 = 18 (pattern, text) combos,
6 match). Cases:
a*b — 1 match (aaab)
?b*c — 1 match (abc)
*x*y* — 4 matches (abxyz, xy, xyz, axby)
is_match uses `||` for the `*` alternation (consume zero or one
more char and recurse) and `&&` for the literal/`?` case.
Tests deeply nested short-circuit, char equality in pattern
predicate, doubly-nested `List.iter` to enumerate the cross
product. 173 baseline programs total.
- 2026-05-11 Phase 5.1 — powerset_target.ml baseline (count subsets
of {1..10} summing to 15 = 20). Generates the full 2^10 = 1024
powerset by recursive doubling: `gen (h :: rest) = gen rest @