view 7-Haskell/factorial.hs @ 93:39084e2b8744

Add a function for word-aware text wrapping Potentially hugely inefficient because we iterate through the string character by character, but then splitting it first and iterating over words still needs to iterate over the string to know where to split.
author IBBoard <dev@ibboard.co.uk>
date Tue, 18 Jun 2019 21:05:00 +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