2015-09-04 82 views
-2

我有兩個功能:n = n-1n = n+1如何使用n-1和n + 1進行'添加'功能

我怎樣才能使用這些定義使用遞歸,if-then-else,==函數add

+4

我投票關閉這一問題作爲題外話,因爲它並沒有顯示什麼,筆者迄今嘗試和他們卡住了:那麼,你會公理化功能add例如。 – dfeuer

+1

歡迎來到Stack Overflow。請參閱幫助中心,獲取有關如何在此提出良好問題的建議。 – dfeuer

+0

@dfeuer我認爲屬於「太寬泛」... – Bakuriu

回答

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

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