Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- data Nat = Zero | Suc Nat
- fromNat :: Nat -> Integer
- fromNat Zero = 0
- fromNat (Suc n) = fromNat n + 1
- add :: Nat -> Nat -> Nat
- add Zero Zero = Zero
- add Zero x = x
- add x Zero = x
- add (Suc xs) b@(Suc ys) = add (xs) (Suc b)
- mul :: Nat -> Nat -> Nat
- mul Zero _ = Zero
- mul _ Zero = Zero
- mul a b = let
- f _ Zero res = res
- f Zero _ res = res
- f (Suc xs) b res = f xs b (add b res)
- in f a b Zero
- fac :: Nat -> Nat
- fac Zero = Suc Zero
- fac x = let
- f (Suc Zero) res = res
- f (Suc ys) res = f ys (mul res ys)
- in mul (f x (Suc Zero)) x
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement