首页 文章

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

提问于
浏览
1

我正在尝试编写一个有两个参数的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不匹配] . 为什么?

1 回答

  • 3

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

    在您的情况下, a 的类型为 intbc 都具有类型 int list . 因此, :: 的第二次使用并不是很好的类型,因为它在两侧都有一个列表 . 而是在该位置使用列表连接 @ .

相关问题