Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.57 KB | None | 0 0
  1. let rec lrepeat f xs =
  2.   let rec aux = function
  3.       (LCons(x, xf), i, 0) -> aux(xf(), i+1, (f (i + 1)))
  4.     | (LCons(x, xf) as xl, i, r) -> LCons(x, fun() -> aux(xl, i, (r - 1)))
  5.     | (LNil, _, _) -> LNil
  6.   in aux(xs, 0, (f 0));;
  7.  
  8. let sublist xs lxs =
  9.   let rec iter = function    
  10.       (_, LNil, _) -> LNil
  11.     | ([], lxs, _) -> lxs
  12.     | (h::t, LCons(x, xf), i) -> if h = i
  13.                                  then iter(t, xf(), i+1)
  14.                                  else LCons(x, function() -> iter(h::t, xf(), i+1))
  15.   in iter(List.sort compare xs, lxs, 0);;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement