【发布时间】:2015-02-24 00:16:12
【问题描述】:
我编写了这个将两个列表合并在一起的函数,但由于我对函数式编程相当陌生,我想知道是否有更好(更简单)的方法来做到这一点?
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"; “乙”; “C”; “d”],我正在还原列表以保持原始顺序。我以为我可以使用 List.foldBack(并删除 List.rev)来实现相同的目标,但它会导致错误:
类型不匹配。期待一个
'一个
但给定一个
'列表
当统一 ''a' 和 ''a list' 时,结果类型将是无限的
为什么在使用 foldBack 时会有所不同?
【问题讨论】:
-
对于foldBack,检查文件夹中参数的顺序,应该是(fun elem acc -> ...)
标签: f#