view 7-Haskell/factorial.hs @ 103:98be775c533c default tip

An odd "non-determinism" example from StackOverflow It is clever, but doesn't make much sense as to how it gets its results
author IBBoard <dev@ibboard.co.uk>
date Sun, 14 Jul 2019 13:44:13 +0100
parents 2b5341fc4555
children
line wrap: on
line source

module Factorial where
    -- The book says to use "Main", but that now triggers "The IO action ‘main’ is not defined in module ‘Main’". https://optimistictypes.com/compiler-errors/#module-main-where says Main is special and must have a function "main".
    -- Instead we'll use our own module name, because it doesn't seem to be important (yet).

    -- Without pattern matching
    fact :: Integer -> Integer
    -- Note how this is like a Python "x if a else y"
    fact x = if x == 0 then 1 else x * fact (x - 1)

    -- With pattern matching
    factorial :: Integer -> Integer
    factorial 0 = 1
    factorial x = x * factorial(x - 1)

    -- With guards
    factorial_guard :: Integer -> Integer
    factorial_guard x
        -- List of definitions, which look similar to the pattern matching but without the function name
        | x > 1 = x * factorial(x - 1)
        -- And the fallback "otherwise" result
        | otherwise = 1