Изменения

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

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

1138 байт добавлено, 16:20, 26 апреля 2015
Рациональные числа
==Рациональные числа==
data Rat = Rat Int Nat
ratNeg :: Rat -> Rat
ratNeg (Rat x y) = Rat (intNeg x) y
ratInv :: Rat -> Rat
ratInv (Rat (Plus x) y) = Rat (Plus y) x
ratInv (Rat (Minus x) y) = Rat (Minus y) x
ratCmp :: Rat -> Rat -> Tri
ratCmp (Rat a b) (Rat c d) = intCmp (a .*. (Plus d)) (c .*. (Plus b))
ratEq :: Rat -> Rat -> Bool
ratEq (Rat a b) (Rat c d) = intEq (a .*. (Plus d)) (c .*. (Plus b))
ratLt :: Rat -> Rat -> Bool
ratLt (Rat a b) (Rat c d) = intEq (a .*. (Plus d)) (c .*. (Plus b))
internalRatPlus :: Rat -> Rat -> Rat
internalRatPlus (Rat a b) (Rat c d) = Rat ((a .*. (Plus d)) .+. (c .*. (Plus b))) (b *. d)
internalRatShorten :: Rat -> Rat
internalRatShorten (Rat (Plus a) b) = Rat (Plus (a /. (gcd a b))) (b /. (gcd a b))
internalRatShorten (Rat (Minus a) b) = Rat (Minus (a /. (gcd a b))) (b /. (gcd a b))
infixl 7 %+, %-
(%+) :: Rat -> Rat -> Rat
n %+ m = internalRatShorten (internalRatPlus n m)
(%-) :: Rat -> Rat -> Rat
n %- m = n %+ (ratNeg m)
infixl 7 %*, %/
(%*) :: Rat -> Rat -> Rat
(Rat a b) %* (Rat c d) = Rat (a .*. c) (b *. d)
(%/) :: Rat -> Rat -> Rat
n %/ m = n %* (ratInv m)
 
==GCD==
120
правок

Навигация