如何使用n-1和n + 1进行'添加'功能

问题描述:

我有两个功能:n = n-1n = n+1如何使用n-1和n + 1进行'添加'功能

我怎样才能使用这些定义使用递归,if-then-else,==函数add

+4

我投票关闭这一问题作为题外话,因为它并没有显示什么,笔者迄今尝试和他们卡住了:那么,你会公理化功能add例如。 – dfeuer

+1

欢迎来到Stack Overflow。请参阅帮助中心,获取有关如何在此提出良好问题的建议。 – dfeuer

+0

@dfeuer我认为属于“太宽泛”... – Bakuriu

假设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

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(x,y) = add(y,x) 
add(x,0) = x 
add(x,s(y)) = add(s(x),y)