Skip to content

Instantly share code, notes, and snippets.

@ikr7
Last active June 2, 2016 14:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ikr7/4b158ebecec7fe09a7f24617dccd6f2a to your computer and use it in GitHub Desktop.
Save ikr7/4b158ebecec7fe09a7f24617dccd6f2a to your computer and use it in GitHub Desktop.
変な計算
eqz :: Integer -> Bool
eqz a = a == 0
add :: Integer -> Integer -> Integer
add a b
| eqz b = a
| otherwise = succ $ add a $ pred b
mul :: Integer -> Integer -> Integer
mul a b
| eqz b = 0
| otherwise = add a $ mul a $ pred b
pow :: Integer -> Integer -> Integer
pow a b
| eqz b = 1
| otherwise = mul a $ pow a $ pred b
sub :: Integer -> Integer -> Integer
sub a b
| eqz b = a
| otherwise = pred $ sub a $ pred b
mod' :: Integer -> Integer -> Integer
mod' a b
| eqz a = 0
| eqz (sub a b) = 0
| a < b = a
| otherwise = mod' (sub a b) b
gcd' :: Integer -> Integer -> Integer
gcd' a b
| eqz b = a
| otherwise = gcd' b (mod' a b)
per :: Integer -> Integer -> Integer
per a b
| eqz b = a
| otherwise = mul a $ per (pred a) (pred b)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment