0

有沒有一種方法可以爲整個數字定義數據類型。即,0,1,2,...不是零,一個......單獨。sml中的遞歸數據類型

我想定義一組整數。使用0,n,n + 1遞歸。 我試過這樣的事情:datatype nat = 0 | n | n + 1。但是它幾乎不能工作,因爲它不會將0識別爲整數?

我將不勝感激任何幫助。

回答

3

由於自然數集是可數無限,無法枚舉所有的情況。

您可以通過Peano numbers概念代表自然數:

datatype peano = Zero | Succ of peano 

的數據類型是非常簡單的,它只定義0,並確保每個自然數都有一個後繼者。例如,2實際上表示爲Succ (Succ Zero)

fun count Zero = 0 
    | count (Succ p) = 1 + count p 

使用類似的技術,你可以像你有一個自然數建立addsubmult功能。

+0

是的,但我需要使用使用0,1,2,3而不是succ(succ(succ(zer0)))的數據類型。 所以我可以把它看作是否定的,對於無限的0,1,2,...是不可能的? – 700resu

+0

是的,你是對的。 – pad

+0

@ user1710036爲什麼你需要這種表示,如果你不介意我的問題? – waldrumpus