Advertisement
loulett

f#exam

May 28th, 2016
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.86 KB | None | 0 0
  1. //Стуктура дерева арифметического выражения
  2.  
  3. type 't Node =
  4.    |Mult of 't Node * 't Node
  5.    |Plus of 't Node * 't Node
  6.    |Sub of 't Node * 't Node
  7.    |Div of 't Node * 't Node
  8.    |Num of 't
  9.  
  10. type 't Tree =
  11.    |Nil
  12.    |Node of 't Node * 't Tree * 't Tree
  13.  
  14.  
  15. //Максимум арифметического выражения (хуйня какая-то, но зашло)
  16. let findMax lst =
  17.     let rec findMax' acc fl lst =
  18.        match lst with
  19.        |[] -> if fl then 0 else acc
  20.        |h::1::t when h > 0 -> findMax' (acc * (1+h)) false t
  21.         |h::1::t when h < 0 -> findMax' (acc * (1-h)) false t
  22.        |h::-1::t when h > 0 -> findMax' (acc * (1+h)) false t
  23.         |h::-1::t when h < 0 -> findMax' (acc * (1-h)) false t
  24.        |1::h::t when h > 0 -> findMax' (acc * (1+h)) false t
  25.         |1::h::t when h < 0 -> findMax' (acc * (1-h)) false t
  26.        |(-1)::h::t when h > 0 -> findMax' (acc * (1+h)) false t
  27.         |(-1)::h::t when h < 0 -> findMax' (acc * (1-h)) false t
  28.        |h::t when h > 0 -> findMax' (acc * h) false t
  29.         |h::t when h < 0 -> findMax' (acc * -h) false t
  30.        |h::t when h = 0 -> findMax' acc fl t
  31.     findMax' 1 true lst
  32.  
  33. findMax [1;2;3]
  34.  
  35. // Деление массива на всевозможные 2 части (не сохраняет порядок, т.е. в массиве [1;2;3] есть вариант деления [2], [1;3])
  36. let rec Division (lst : int list): ((int list) * (int list)) list =
  37.    let rec MyMap acc lst k =
  38.        match lst with
  39.        |[] -> List.rev(acc)
  40.        |h::t -> MyMap ((k::(fst h), snd h) :: (fst h, k::(snd h)) :: acc) t k
  41.  
  42.    match lst with
  43.    |[] -> []
  44.    |l when List.length(l) = 1 -> [([], [l.Head]); ([l.Head], [])]
  45.    |h::t ->
  46.        let subDiv = Division t
  47.        MyMap [] subDiv h
  48.  
  49. Division [1;2;3;4]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement