2016-06-09 76 views
1

我想写一个SML函数,它有两个参数,第一个是 int,第二个是列表的列表。目标是在第二个参数中的每个列表的前面插入第一个参数。例如,append_to_front(1,[[3,4],[6,8],[]])应返回[[1,3,4],[1,6,8],[1]]SML:错误:运算符和操作数不一致[tycon不匹配]

我的代码:

fun append_to_front(a:int, L:int list list) = 
    if L = [] 
    then [] 
    else a::hd(L)::append_to_front(a, tl(L)); 

,我得到的错误信息:错误:运算符和操作数不同意[tycon不匹配]。为什么?

+2

你也可以用更高阶的函数来解决这个问题:'append_to_front(x,L)= map(fn xs => x :: xs)L' –

回答

3

cons运营商::的类型为'a * 'a list -> 'a list,即它需要左侧的元素和右侧的列表。此外,它是右联合的,即a::b::c = a::(b::c)

在你的情况,a具有类型intbc都有型int list。因此,::的第二次使用不是很好的类型,因为它有一个双方列表。改为使用列表连接@

+1

谢谢你的提示。 (a :: hd(L))添加括号解决了我的问题。 –

相关问题