簡體   English   中英

自然數作為遞歸數據類型

[英]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 3Succ(Succ(Succ 0)))盡管對我來說還不是100%清楚這是值本身下降還是下降了。 我想逐步了解添加。

PS:這取自Richard Bird的《函數式編程簡介》一書。

在通常的數學表示法中, Zero0Succ1 + 所以:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM