![](/img/trans.png)
[英]Using the addition function over the natural numbers, give a recursive definition of multiplication of natural numbers?
[英]Natural numbers as a recursive datatype
我已經開始使用數據類型,但是我對以下內容感到困惑:
data Natural = Zero | Succ Natural
add :: Natural -> Natural -> Natural
add m Zero = m
add m (Succ n) = Succ (add m n)
這個加法是如何工作的。 我知道Natural 3
由Succ(Succ(Succ 0)))
盡管對我來說還不是100%清楚這是值本身下降還是下降了。 我想逐步了解添加。
PS:這取自Richard Bird的《函數式編程簡介》一書。
在通常的數學表示法中, Zero
是0
而Succ
是1 +
。 所以:
add m Zero = m
是說m + 0 = m
,並且:
add m (Succ n) = Succ (add m n)
是說m + (1 + n) = 1 + (m + n)
。 因此,在每個遞歸調用中, +
的第二個參數將減小1,直到基本情況為0。例如,假設我們要計算2 + 3
:
add (Succ (Succ Zero)) (Succ (Succ (Succ Zero)))
Succ (add (Succ (Succ Zero)) (Succ (Succ Zero)))
Succ (Succ (add (Succ (Succ Zero)) (Succ Zero)))
Succ (Succ (Succ (add (Succ (Succ Zero)) Zero)))
Succ (Succ (Succ (Succ (Succ Zero))))
要么:
add two three
Succ (add two two)
Succ (Succ (add two one))
Succ (Succ (Succ (add two Zero)))
Succ (Succ (Succ two))
five
鑒於:
one = Succ Zero
two = Succ one
three = Succ two
four = Succ three
five = Succ four
您也可以將Natural
類型視為不包含值的鏈表,其中長度表示數字。 然后+
只是這些列表的串聯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.