Advertisement
Guest User

Untitled

a guest
Nov 13th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.95 KB | None | 0 0
  1. type 'a tree =
  2.   Node of 'a * 'a tree list;;
  3.  
  4. let rec fold_tree f (Node (x,l)) =
  5.   f x (map (fold_tree f) l);;
  6.  
  7.  
  8. let prawie l =
  9.   let aux (nie_ok, ok, poprzedni, najlepszy) x =
  10.     if ( (poprzedni > 0 && x < 0) || (poprzedni < 0 && x > 0) )
  11.       then
  12.         let best = max (nie_ok + 1) (ok + 1)
  13.         in (nie_ok + 1 , ok + 1, x, max najlepszy best )
  14.     else
  15.       let best = max najlepszy (ok + 1)
  16.       in (ok + 1 , 0 , x , best)
  17.   in let (_,_,_,wyn) = fold_left aux (0,0,0,0) l
  18.   in wyn;;
  19.  
  20. let sumy_prefixowe l =
  21.   let aux (cur, ret) h =
  22.     let new_cur = cur + h in (new_cur, new_cur::ret)
  23.   in let (_, ret) = List.fold_left aux (0, []) l
  24.   in List.rev ret
  25. ;;
  26.  
  27. let prextrema l =
  28.   let aux (min, max, ret) h =
  29.     if h < min then (h, max, (h::ret))
  30.     else if h > max then (min, h, (h::ret))
  31.     else (min, max, ret)
  32.   in match l with
  33.     | [] -> []
  34.     | h::t -> let (_, _, ret) = fold_left aux ((h, h, [h])) t
  35.     in rev ret
  36. ;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement