Types SML:数据类型声明赢得';不允许
标准SML基础Types SML:数据类型声明赢得';不允许,types,sml,Types,Sml,标准SML基础列表定义为 datatype 'a list = [] | :: of 'a * 'a list datatype 'a list = [] | :: of 'a * 'a list 但是,当我尝试创建自己的列表数据类型时,会出现以下错误: - datatype 'a mylist = [] | mycons of 'a * 'a mylist Error: syntax error found at LBRACKET 然而,这是可行的: - datatype 'a myl
列表定义为
datatype 'a list = [] | :: of 'a * 'a list
datatype 'a list = [] | :: of 'a * 'a list
但是,当我尝试创建自己的列表数据类型时,会出现以下错误:
- datatype 'a mylist = [] | mycons of 'a * 'a mylist
Error: syntax error found at LBRACKET
然而,这是可行的:
- datatype 'a mylist = Nil | mycons of 'a * 'a mylist;
datatype 'a mylist = Mycons of 'a * 'a mylist | Nil
但由于缺少方括号,此verson无法生成非常类似列表的输出:
- Mycons (1,Nil);
val it = Mycons (1,Nil) : int mylist
- Mycons (1, Mycons (1,Nil));
val it = Mycons (1,Mycons (1,Nil)) : int mylist
为什么SML不接受我最初尝试的[]
?这个:
标准SML基础清单定义如下:
datatype 'a list = [] | :: of 'a * 'a list
datatype 'a list = [] | :: of 'a * 'a list
这是不对的
相反,list
的定义如下:
datatype 'a list = nil | :: of 'a * 'a list
而[foo,bar,baz]
符号是一种特殊的语法(一种“派生形式”),经修订的标准ML定义(在附录a第56页)明确定义为等同于foo::bar::baz::nil
对于您的类型,您将无法重新定义[…]
语法-它内置于语言中,其含义是固定的-但您可以通过使用符号(非字母数字)标识符并将其声明为中缀和右关联,使您的语法至少更友好一些;例如:
infixr :::
datatype 'a my_list = MY_NIL | ::: of 'a * 'a my_list
val twoOnes = 1 ::: 1 ::: MY_NIL
这:
标准SML基础清单定义如下:
datatype 'a list = [] | :: of 'a * 'a list
datatype 'a list = [] | :: of 'a * 'a list
这是不对的
相反,list
的定义如下:
datatype 'a list = nil | :: of 'a * 'a list
而[foo,bar,baz]
符号是一种特殊的语法(一种“派生形式”),经修订的标准ML定义(在附录a第56页)明确定义为等同于foo::bar::baz::nil
对于您的类型,您将无法重新定义[…]
语法-它内置于语言中,其含义是固定的-但您可以通过使用符号(非字母数字)标识符并将其声明为中缀和右关联,使您的语法至少更友好一些;例如:
infixr :::
datatype 'a my_list = MY_NIL | ::: of 'a * 'a my_list
val twoOnes = 1 ::: 1 ::: MY_NIL
就my_列表中的'a*'而言,这似乎是一个元组,因此如果不是中缀::
我们有原始的mycons
,我们可以有'mycons(1,Nil)。这是正确的评估吗?就my_列表而言,这似乎是一个元组,因此如果不是中缀::
我们有原始的mycons
,我们可以有'mycons(1,Nil)。这是正确的评估吗?