Mercurial > repos > other > SevenLanguagesInSevenWeeks
view 7-Haskell/factorial.hs @ 101:1fae0cca1ef8
Reduce large maze to single width corridors
This reduces the permutations for
a x
x x
b x
To one (two steps north) from four (two steps north; one east, two north, one west; one east, one north, one west, one north; and one north, one east, one north, one west). Longer corridors were worse!
We would filter this in the "been here before via another path" but that's still a lot of lookups in lists, which is inefficient.
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 14 Jul 2019 13:42:24 +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