Изменения

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

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

1866 байт добавлено, 14:12, 26 апреля 2015
Натуральные числа
#* [https://github.com/itanf/ITMO-Training-FunctionalProgramming/blob/master/ITMOPrelude/List.hs List.hs]
==Натуральные числа==
data Nat = Zero | Succ Nat deriving (Show,Read) <font color=green>-- Определение натуральных чисел</font>
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 Zero (Succ _) = LT
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 Zero (Succ _) = False
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 Zero (Succ m) = True
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
Zero -. _ = Zero
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 =
if (n natLt 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
правок

Навигация