2016-06-09 50 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))添加括號解決了我的問題。 –

相關問題