Skip to content

Instantly share code, notes, and snippets.

@thealmarty
Last active January 3, 2019 19:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thealmarty/52dfa005050dd403cfd0498d4e3d1076 to your computer and use it in GitHub Desktop.
Save thealmarty/52dfa005050dd403cfd0498d4e3d1076 to your computer and use it in GitHub Desktop.
The zip function in OCaml, defined with unfold.
(* Define the unfold function.*)
let rec unfold p g b1 b2 =
if p b1 b2 then [] else
(match g b1 b2 with (a, (b1prime, b2prime)) ->
a :: unfold p g b1prime b2prime)
;;
(* Define the zip function.*)
let zip = unfold
(* Define p.*)
(fun x y -> ((List.length x = 0) || (List.length y = 0)))
(* Define g.*)
(fun x y -> ( (List.hd x, List.hd y), (List.tl x, List.tl y)))
;;
@thealmarty
Copy link
Author

See my blog post.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment