複製鏈接
請複製以下鏈接發送給好友

遞歸類型

鎖定
在計算機編程語言,一個遞歸類型(也被稱為遞歸定義電感定義感應數據類型)是一種數據類型,選擇那些包含相同類型的其它值的值。遞歸類型的數據通常被視為有向圖
遞歸在計算機科學中的一個重要應用是定義動態數據結構,如列表和樹。遞歸數據結構可以響應運行時要求動態增長到任意大的大小; 相反,必須在編譯時設置靜態數組的大小要求。
有時,術語“歸納數據類型”用於不一定遞歸的代數數據類型
中文名
遞歸類型
外文名
Recursive data type
學    科
計算機科學

目錄

遞歸類型定義

在計算機編程語言中,遞歸類型(又名:遞歸定義隱含類型隱含定義)是一種特殊的數據類型,它表示自身內部可能包含其它的同樣類型的值。

遞歸類型使用範例

以下是一個在Haskell中使用鏈表類型的一個列子:
data List a = Nil | Cons a (List a)
這表示a的鏈表s可以是一個空表或一個cons單元包含了一個'a'(鏈表的“頭”)和另一個鏈表(“尾”)。
遞歸不允許在Miranda語言中和Haskell的同義類型中出現,所以以下的Haskell類型是非法的:
type Bad = (Int, Bad) type Evil = Bool -> Evil 
相反地,表面上是相等的代數數據類型卻是可以的:
data Good = Pair Int Good data Fine = Fun (Bool->Fine)
相互遞歸數據類型
數據類型也可以通過相互遞歸來定義。 [1]  最重要的基本示例是,可以根據森林(樹木列表)相互遞歸地定義樹。象徵:
f: [t[1], ..., t[k]]t: v f
森林f由樹木列表組成,而樹木t由一對值v和森林f(其子)組成。這個定義是優雅的,並且易於抽象地工作(例如當證明有關樹的屬性的定理時),因為它用簡單的術語表示樹:一種類型的列表和一種兩種類型的對。
通過內聯林的定義,可以將此相互遞歸定義轉換為單個遞歸定義:
t:v [t [1],...,t [k]]
t由一對值v和樹列表(它的孩子)組成。這個定義更緊湊,但有點混亂:一棵樹由一對類型和另一種類型組成,需要解開才能證明結果。
在標準ML中,樹和林數據類型可以相互遞歸地定義如下,允許空樹:
datatype 'a tree = Empty | Node of 'a * 'a forestand     
 'a forest = Nil | Cons of 'a tree * 'a forest
參考資料
  • 1.    Munkres, James (1975). Topology, a first course (1st ed.). New Jersey: Prentice-Hall. p. 68, exercises 10 and 12. ISBN 0-13-925495-1.