我寫了這個函數,它將兩個列表合併在一起,但是因爲我對函數式編程相當陌生,所以我想知道是否有更好的(更簡單)的方法來實現它?合併F#中的兩個列表
let a = ["a"; "b"; "c"]
let b = ["d"; "b"; "a"]
let merge a b =
// take all a and add b
List.fold (fun acc elem ->
let alreadyContains = acc |> List.exists (fun item -> item = elem)
if alreadyContains = true then
acc
else
elem :: acc |> List.rev
) b a
let test = merge a b
預期結果是:[「a」; 「B」; 「C」; 「d」],我正在恢復列表以保持原始順序。我認爲我可以使用List.foldBack(並刪除List.rev)來實現相同的效果,但會導致錯誤:
類型不匹配。期待 「一個
但給予 ‘列表
統一‘’A’和'名單」
爲什麼會出現使用折返當差時產生的類型將是無限的?
對於foldBack,請檢查文件夾中參數的順序,它應該是(fun elem acc - > ...) – 2015-02-23 16:09:13