我正在尝试编写一个有两个参数的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 回答
cons运算符
::
的类型为'a * 'a list -> 'a list
,也就是说,它需要左侧的元素和右侧的列表 . 而且,它是右关联的,即a::b::c = a::(b::c)
.在您的情况下,
a
的类型为int
,b
和c
都具有类型int list
. 因此,::
的第二次使用并不是很好的类型,因为它在两侧都有一个列表 . 而是在该位置使用列表连接@
.