SML:错误:运算符和操作数don';不同意[泰康不匹配]

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

我试图编写一个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(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