Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 21s
zip walks both lists in lockstep, truncating at the shorter. unzip uses tuple-pattern destructuring on the recursive result. let pairs = zip [1;2;3;4] [10;20;30;40] in let (xs, ys) = unzip pairs in List.fold_left (+) 0 xs * List.fold_left (+) 0 ys = 10 * 100 = 1000 Exercises: - tuple-cons patterns in match scrutinee: 'match (xs, ys) with' - tuple constructor in return value: '(a :: la, b :: lb)' - the iter-98 let-tuple destructuring: 'let (la, lb) = unzip rest' 53 baseline programs total.
19 lines
395 B
OCaml
19 lines
395 B
OCaml
let rec zip xs ys =
|
|
match (xs, ys) with
|
|
| ([], _) -> []
|
|
| (_, []) -> []
|
|
| (x :: xs', y :: ys') -> (x, y) :: zip xs' ys'
|
|
|
|
let rec unzip pairs =
|
|
match pairs with
|
|
| [] -> ([], [])
|
|
| (a, b) :: rest ->
|
|
let (la, lb) = unzip rest in
|
|
(a :: la, b :: lb)
|
|
|
|
;;
|
|
|
|
let pairs = zip [1;2;3;4] [10;20;30;40] in
|
|
let (xs, ys) = unzip pairs in
|
|
List.fold_left (+) 0 xs * List.fold_left (+) 0 ys
|