我有两个功能:n = n-1
和n = n+1
。
如何通过递归使用这些定义创建add
函数,if-then-else,==
?
答案 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)
假设inc
和dec
是你的职能:
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
。