SML:错误:运算符和操作数don';不同意[泰康不匹配]
我试图编写一个SML函数,它有两个参数,第一个是 int,第二个是列表列表。目标是将第一个参数插入到第二个参数中每个列表的前面。例如,SML:错误:运算符和操作数don';不同意[泰康不匹配],sml,Sml,我试图编写一个SML函数,它有两个参数,第一个是 int,第二个是列表列表。目标是将第一个参数插入到第二个参数中每个列表的前面。例如,append_to_front(1,[[3,4],[6,8],][/code>应该返回[[1,3,4],[1,6,8],[1]] 我有密码: fun append_to_front(a:int, L:int list list) = if L = [] then [] else a::hd(L)::append_to_front(a, tl
append_to_front(1,[[3,4],[6,8],][/code>应该返回[[1,3,4],[1,6,8],[1]]
我有密码:
fun append_to_front(a:int, L:int list list) =
if L = []
then []
else a::hd(L)::append_to_front(a, tl(L));
我得到了错误信息:错误:运算符和操作数不一致[tycon不匹配]。为什么?cons运算符::
的类型为'a*'a list->'a list
,也就是说,它需要左侧的元素和右侧的列表。此外,它是右关联的,即,a::b::c=a::(b::c)
在您的情况下,a
具有类型int
,b
和c
都具有类型int list
。因此,:
的第二个用法没有很好地键入,因为它两边都有一个列表。在该位置使用列表连接。cons运算符::
的类型为'a*'a list->'a list
,也就是说,它需要左侧的元素和右侧的列表。此外,它是右关联的,即,a::b::c=a::(b::c)
在您的情况下,a
具有类型int
,b
和c
都具有类型int list
。因此,:
的第二个用法没有很好地键入,因为它两边都有一个列表。请在该位置使用列表连接。谢谢您的提示。我通过在(a::hd(L))中添加括号解决了我的问题。谢谢你的提示。我通过在(a::hd(L))中添加括号解决了我的问题。你也可以用高阶函数来解决这个问题:fun append_to_front(x,L)=map(fn xs=>x::xs)L
你也可以用高阶函数来解决这个问题:fun append_to_front(x,L)=map(fn xs=>x::xs L