Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Стуктура дерева арифметического выражения
- type 't Node =
- |Mult of 't Node * 't Node
- |Plus of 't Node * 't Node
- |Sub of 't Node * 't Node
- |Div of 't Node * 't Node
- |Num of 't
- type 't Tree =
- |Nil
- |Node of 't Node * 't Tree * 't Tree
- //Максимум арифметического выражения (хуйня какая-то, но зашло)
- let findMax lst =
- let rec findMax' acc fl lst =
- match lst with
- |[] -> if fl then 0 else acc
- |h::1::t when h > 0 -> findMax' (acc * (1+h)) false t
- |h::1::t when h < 0 -> findMax' (acc * (1-h)) false t
- |h::-1::t when h > 0 -> findMax' (acc * (1+h)) false t
- |h::-1::t when h < 0 -> findMax' (acc * (1-h)) false t
- |1::h::t when h > 0 -> findMax' (acc * (1+h)) false t
- |1::h::t when h < 0 -> findMax' (acc * (1-h)) false t
- |(-1)::h::t when h > 0 -> findMax' (acc * (1+h)) false t
- |(-1)::h::t when h < 0 -> findMax' (acc * (1-h)) false t
- |h::t when h > 0 -> findMax' (acc * h) false t
- |h::t when h < 0 -> findMax' (acc * -h) false t
- |h::t when h = 0 -> findMax' acc fl t
- findMax' 1 true lst
- findMax [1;2;3]
- // Деление массива на всевозможные 2 части (не сохраняет порядок, т.е. в массиве [1;2;3] есть вариант деления [2], [1;3])
- let rec Division (lst : int list): ((int list) * (int list)) list =
- let rec MyMap acc lst k =
- match lst with
- |[] -> List.rev(acc)
- |h::t -> MyMap ((k::(fst h), snd h) :: (fst h, k::(snd h)) :: acc) t k
- match lst with
- |[] -> []
- |l when List.length(l) = 1 -> [([], [l.Head]); ([l.Head], [])]
- |h::t ->
- let subDiv = Division t
- MyMap [] subDiv h
- Division [1;2;3;4]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement