A 遞歸數據類型是一個數據類型,它在其定義中使用自身。
這方面的一個例子是:
datatype intlist = IntNil
| IntCons of int * intlist
通知intlist
是如何在IntCons
值構造函數的定義中使用。
val ls = IntCons(5, IntCons(6, IntNil));
請注意IncCons在本例中如何包含另一個列表值。
A 多態數據類型是一種數據類型,其中一個或多個值構造函數可以包含多態值。
舉例來說,你可以看看:
datatype 'a pair = Pair of 'a * 'a
這裏,'a
是一個類型變量,這樣的構造可以在任何類型的值來使用。例如:
val pairInt = Pair(1, 5);
val pairStr = Pair("Hello", "Goodbye");
val pairChr = Pair(#"x", #"y");
這兩件事情常常合併成多態性遞歸數據類型,如爲正常列表完成:
datatype 'a mylist = MyNil
| MyCons of 'a * 'a mylist;
這既是多態性,遞歸的,如可以在這些實施例中可以看出:
val listInt = MyCons(5, MyCons(6, MyNil));
val listStr = MyCons("abc", MyCons("def", MyNil));
val listChr = MyCons(#"a", MyCons(#"b", MyNil));
閱讀#as ... - 那裏有更多的嵌套表達式,但打印機爲了便於閱讀而縮寫它們。如果這是SML/NJ,您可以設置例如'Control.Print.printDepth:= 10'來調整它。 –