Advertisement
Guest User

Untitled

a guest
Nov 13th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.41 KB | None | 0 0
  1. let levels d =
  2.     map (fun a -> a []) (
  3.         let zloz l p = fold_left (
  4.             fun (f, w) e ->
  5.                 match f with
  6.                 | [] -> (f,e::w)
  7.                 | h::t -> (t,(fun a -> e (h a))::w)
  8.             ) (p, []) l
  9.         in let zloz_wrapper_dwa l p =
  10.             if length l < length p then
  11.                 zloz l p
  12.             else
  13.                 zloz p l
  14.         in let zloz_wrapper l p =
  15.             let (r,x) = zloz_wrapper_dwa l p in
  16.             (rev x) @ r
  17.         in
  18.         fold_tree (fun w l r a -> (w::a)::(zloz_wrapper l r)) [] d
  19.     );;
  20.  
  21. let rec zloz l p =
  22.     match l, p with
  23.     | [], _ -> p
  24.     | _, [] -> l
  25.     | (a::x, b::y) -> (function x -> a (b x))::(zloz x y)
  26.  
  27.  
  28. let zloz l p = rev (snd (fold_left (
  29.     fun (f, w) e ->
  30.         match f with
  31.         | [] -> (f,e::w)
  32.         | h::t -> (t,(fun a -> e (h a))::w)
  33.     ) (p, []) l))
  34.  
  35. let zloz l p = rev (snd (fold_left (
  36.     fun (f, w) e ->
  37.         match f with
  38.         | [] -> (f,e::w)
  39.         | h::t -> (t,(fun a -> e (h a))::w)
  40.     ) (p, []) l))
  41. in let zloz_wrapper l p =
  42.     if length l < length p then
  43.         zloz p l
  44.     else
  45.         zloz l p
  46. in
  47.  
  48.  
  49. let zloz l p = fold_left (
  50.     fun (f, w) e ->
  51.         match f with
  52.         | [] -> (f,e::w)
  53.         | h::t -> (t,(fun a -> e (h a))::w)
  54.     ) (p, []) l
  55. in let zloz_wrapper_dwa l p =
  56.     if length l < length p then
  57.         zloz l p
  58.     else
  59.         zloz p l
  60. in let zloz_wrapper l p =
  61.     let (r,x) = zloz_wrapper_dwa l p in
  62.     (rev x) @ r
  63.  
  64. let levels t =
  65.     let aux x fl fr =
  66.         function  
  67.         | [] -> [x] :: (fl(fr []))
  68.         | h::t -> [x @ h] :: (fl (fr t))
  69.     in
  70.         fold_tree aux (fun x -> x) t [];;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement