如何定义异构列表数据类型?

时间:2013-04-03 12:40:52

标签: sml smlnj

我刚开始学习SML并遇到问题。我想为一个非同类的列表定义一个数据类型 举个例子

val a = [1,[2,4,3],5,[2,6]] 

我已经制作了这个数据类型

datatype 'a MulList = List of 'a multiList list
                    | E of 'a;

但是我收到以下错误

/tmp/emacs-region29207RwC:8.34-8.43 Error: unbound type constructor: multiList

uncaught exception Error
  raised at: ../compiler/TopLevel/interact/evalloop.sml:66.19-66.27
             ../compiler/TopLevel/interact/evalloop.sml:44.55
             ../compiler/TopLevel/interact/evalloop.sml:296.17-296.20

1 个答案:

答案 0 :(得分:1)

您的数据类型声明有一些错误。首先,优先实践(如你所示)将值构造函数的第一个字母大写,但是在所有小写字母中都有一个类型构造函数也是一种好习惯。
您遇到的真正错误是,在定义值构造函数mullist时,您将multiList类型引用为List

修复后,您可以创建多列表:

datatype 'a mullist = List of 'a mullist list
                    | E of 'a

val a = [E 1, List [E 2, E 4, E 3], E 5, List [E 2, E 6]]