120
 правок
Изменения
→Натуральные числа
#* [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>
==Целые числа==
==Рациональные числа==