2014-05-17 44 views
0

我試圖實現扁平化:'列表列表 - >'SML中的列表列表。 我認爲這應該是相對直接與高階函數。我的實現是在簡單實現SML扁平化時遇到問題

val flatten = List.reduce (op @) [] 

但是我得到一個奇怪的錯誤信息:「append.sml:1.6-1.36警告:由於 值限制類型乏不是一概而論的實例化虛擬類型(X1,X2,。 ..)」。因此,當我嘗試拼合int列表時,我得到一個類型錯誤:

:> flatten [[1,2],[3]];

標準輸入:2.1-2.20錯誤:運算符和操作數不同意[文字]

運營商域名:.X1名單列表
操作:INT名單列表 表達: 扁平化((1 :: 2 ::無)::(3 ::無)::無)

回答

3

作爲錯誤信息提示,則跑進值限制 - 見here一個解釋。解決方案非常簡單:只需「擴展」您的定義,即使參數明確而不是依賴部分應用:

fun flatten xs = List.reduce [email protected] [] xs