Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
-- fact1 on defineeritud tingimusavaldise abil
fact1 n = if n == 0 then 1
else n * fact1 (n-1)
{- fact2 on defineeritud näidistega sobitamise abil;
töötab ainult 32bitiste täisarvudega -}
fact2 :: Int -> Int
fact2 0 = 1
fact2 n = n * fact2 (n-1)
-- fact3 on defineeritud "valvurite" abil
fact3 :: Integer -> Integer
fact3 n | n == 0 = 1
| otherwise = n * fact3 (n-1)
-- see ei lähe lõpmatusse tsüklisse
fact4 :: Integer -> Integer
fact4 n | n == 0 = 1
| n >= 1 = n * fact4 (n-1)
-- samad sõnad, kuid saavutatud n+k näidiste kasutamise abil
fact5 :: Integer -> Integer
fact5 0 = 1
fact5 (n+1) = (n+1) * fact5 n
-- akumulaatorit kasutav faktoriaal
-- defineeritud where konstruktsiooni abil
fact6 :: Integer -> Integer
fact6 n = fact6' 1 n
where fact6' a 0 = a
fact6' a n = fact6' (a*n) (n-1)
-- akumulaatorit kasutav faktoriaal
-- defineeritud let-avaldise, lambda-abstraktsiooni ja case-avaldise abil
fact7 :: Integer -> Integer
fact7 n = let fact7' = \ a n -> case n of
0 -> a
_ -> fact7' (a*n) (n-1)
in fact7' 1 n
-- standartne iteratiivne definitsioon kasutades eeldefineeritud
-- funktsiooni product ja aritmeetilise jada konstruktsiooni
fact8 :: Integer -> Integer
fact8 n = product [1..n]
-- püsipunkti kombinaatori abil defineeritud faktoriaal
fact9 :: Integer -> Integer
fact9 = fixedPt f
where f g 0 = 1
f g n = n * g (n-1)
fixedPt f = g where g = f g