ocaml: phase 5.1 csv.ml baseline (split + int_of_string + fold_left)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 23s

Inline CSV-like text:
  a,1,extra
  b,2,extra
  c,3,extra
  d,4,extra

Two-stage String.split_on_char: first on '\n' for rows, then on ','
for fields per row. List.fold_left accumulates int_of_string of the
second field across rows. Result = 1+2+3+4 = 10.

Exercises char escapes inside string literals ('\n'), nested
String.split_on_char, List.fold_left with a non-trivial closure body,
and int_of_string. 23 baseline programs total.
This commit is contained in:
2026-05-09 01:47:27 +00:00
parent 19497c9fba
commit 5618dd1ef5
3 changed files with 18 additions and 0 deletions

12
lib/ocaml/baseline/csv.ml Normal file
View File

@@ -0,0 +1,12 @@
let sum_second_col text =
let lines = String.split_on_char '\n' text in
List.fold_left (fun acc line ->
let fields = String.split_on_char ',' line in
if List.length fields >= 2 then
acc + int_of_string (List.nth fields 1)
else acc
) 0 lines
;;
sum_second_col "a,1,extra\nb,2,extra\nc,3,extra\nd,4,extra"

View File

@@ -5,6 +5,7 @@
"caesar.ml": 215,
"calc.ml": 13,
"closures.ml": 315,
"csv.ml": 10,
"exception_handle.ml": 4,
"expr_eval.ml": 16,
"factorial.ml": 3628800,

View File

@@ -407,6 +407,11 @@ _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 — csv.ml baseline (split on '\n' then ',',
parse-int the second field, fold-left). Exercises char escapes
inside string literals, two-stage String.split_on_char, mixed
List.fold_left + int_of_string + List.nth. Sums column 2 of a
4-row inline CSV → 1+2+3+4 = 10. 23 baseline programs total.
- 2026-05-09 Phase 4 — polymorphic variants confirmation (+3 tests,
506 total). The tokenizer was already classifying `` `Tag `` as a
ctor identical to a nominal one, but it had never been exercised by