Изменения

Перейти к: навигация, поиск

Функциональное программирование

8 байт добавлено, 14:15, 26 апреля 2015
м
Натуральные числа
natZero = Zero <font color=green>-- 0</font>
natOne = Succ Zero <font color=green>-- 1</font>
natCmp :: Nat -> Nat -> Tri <font color=green>-- Сравнивает два натуральных числа</font>
natCmp Zero Zero = EQ
natCmp (Succ _) Zero = GT
natCmp (Succ n) (Succ m) = natCmp n m
natEq :: Nat -> Nat -> Bool <font color=green>-- n совпадает с m</font>
natEq Zero Zero = True
natEq (Succ _) Zero = False
natEq (Succ n) (Succ m) = natEq n m
natLt :: Nat -> Nat -> Bool <font color=green>-- n меньше m</font>
natLt Zero Zero = False
natLt (Succ n) Zero = False
natLt (Succ n) (Succ m) = natLt n m
infixl 6 +. <font color=green>-- Сложение для натуральных чисел</font>
(+.) :: Nat -> Nat -> Nat
Zero +. m = m
(Succ n) +. m = Succ (n +. m)
infixl 6 -. <font color=green>-- Вычитание для натуральных чисел</font>
(-.) :: Nat -> Nat -> Nat
n -. Zero = n
(Succ n) -. (Succ m) = n -. m
infixl 7 *. <font color=green>-- Умножение для натуральных чисел</font>
(*.) :: Nat -> Nat -> Nat
Zero *. m = Zero
(Succ n) *. m = m +. (n *. m)
natDivMod :: Nat -> Nat -> Pair Nat Nat <font color=green>-- Целое и остаток от деления n на m</font>
natDivMod n m =
then Pair Zero n
else Pair (Succ div) mod where Pair div mod = ((n -. m) natDivMod m)
natDiv n = fst . natDivMod n <font color=green>-- Целое</font>
natMod n = snd . natDivMod n <font color=green>-- Остаток</font>
120
правок

Навигация