我正在尝试编写一个有两个参数的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] 。为什么呢?
答案 0 :(得分:3)
cons运算符::
具有类型'a * 'a list -> 'a list
,也就是说,它需要左侧的元素和右侧的列表。而且,它是右关联的,即a::b::c = a::(b::c)
。
在您的情况下,a
的类型为int
,b
和c
的类型均为int list
。因此,::
的第二次使用并不是很好的类型,因为它在两边都有一个列表。改为在那个地方使用列表连接@
。