2013-04-03 31 views
0

我刚刚开始学习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

[你尝试过什么(http://mattgemmell.com/2008/12/08/what-have-you-tried/)至今? –

+0

数据类型'a MulList ='多列表列表 | '一个; 我创建了这个,但我认为它可能有更好的语法。 – sarah

回答

1

你的数据类型声明有一些错误。首先,这是一种很好的做法(像你一样)将值构造函数的第一个字母大写,但是最好还是使用全部小写的类型构造函数。
您遇到的真正错误是您在定义值构造函数List时将mullist类型引用为multiList

随着那固定的,你可以创建你的多重表:

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]] 
+0

谢谢你的回答,你是对的。但我错了,srry。你的意思是这只是为了mullist的解密?那很好吗?还有其他好的语法吗? – sarah

+0

这不一定是制作“多重列表”的唯一方式,但是这完全取决于情况。但是我会说这是针对所提出的问题的合适解决方案。 –

+0

因此,如果我想以这种格式“E 1”交换元素,我应该怎么做? – sarah

相关问题