如何添加'使用n-1和n + 1的函数

时间:2015-09-04 15:30:38

标签: haskell logic addition

我有两个功能:n = n-1n = n+1

如何通过递归使用这些定义创建add函数,if-then-else,==

2 个答案:

答案 0 :(得分:3)

inc :: Int -> Int
inc n = n + 1

dec :: Int -> Int
dec n = n - 1

add :: Int -> Int -> Int
add n 0 = n
add n m = add (inc n) (dec m)

所以每次减少另一个数字时,你只需增加一个数字。如果你递归你基本上重复这个过程,直到你遇到一些边缘条件。这是当减少的数字下降到0时(注意:仅适用于自然数,而不是负整数)。您可以使用if-then-else将其扩展为负数,并与0(<,>)进行比较。

在逻辑学中你可能有一个函数s。然后你会将函数add公理化为例如:

add(x,y) = add(y,x)
add(x,0) = x
add(x,s(y)) = add(s(x),y)

答案 1 :(得分:2)

假设incdec是你的职能:

add x y | y > 0     = add (inc x) (dec y)
add x y | y < 0     = add (dec x) (inc y)
add x y | otherwise = x

同样适用于subtract