问题
I am just starting to learn SML and having issues. I want to define a datatype, for a list that is not homogeneous.
Take for example
val a = [1,[2,4,3],5,[2,6]]
I have made this datatype
datatype 'a MulList = List of 'a multiList list
| E of 'a;
but I get the following error
/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:
Your datatype declarations has a few errors. First off it is good practice (as you do) to capitalise the first letter of the value constructors, however it is also good practice to have a type constructor in all lower case.
The real error you have is that you reference your mullist type as multiList when you define the value constructor List.
With that fixed, you can create your 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]]
来源:https://stackoverflow.com/questions/15787639/how-can-i-define-a-heteregeneous-list-datatype