SML:错误:运算符和操作数不一致[tycon mismatch]

时间:2016-06-09 21:24:30

标签: sml

我正在尝试编写一个有两个参数的SML函数,第一个是 int和第二个是列表。目标是将第一个参数插入第二个arguemnt中每个列表的前面。例如,append_to_front(1,[[3,4],[6,8],[]])应返回[[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 mismatch] 。为什么呢?

1 个答案:

答案 0 :(得分:3)

cons运算符::具有类型'a * 'a list -> 'a list,也就是说,它需要左侧的元素和右侧的列表。而且,它是右关联的,即a::b::c = a::(b::c)

在您的情况下,a的类型为intbc的类型均为int list。因此,::的第二次使用并不是很好的类型,因为它在两边都有一个列表。改为在那个地方使用列表连接@