我有这一系列函数,isMember
、addElem
和 countries
:
let rec isMember x = function
| y::ys -> y=x || (isMember x ys)
| [] -> false
let addElem x ys = if isMember x ys then ys else x::ys
let rec countries = function
| [] -> []
| (c1,c2)::m -> addElem c1 (addElem c2 (countries m))
我想使用高阶函数重写国家,但我不完全确定如何:
我的猜测是它与 List.map
有关,因为我正在对列表的每个元素应用一个函数。
let countriesHigherOrder m =
List.map (fun x -> addElem x m)
最佳答案
除了使用 List.map,您可以将 List.fold 与您初始化为 [] 的 accu 一起使用,并将元素添加到 accu。
let countriesHigherOrder m =
List.fold (fun acc (c1,c2) -> addElem c1 (addElem c2 acc)) [] m
或通过定义 addPair:
let addPair (x, y) ys =
addElem x (addElem y ys)
let countriesHigherOrder m =
List.fold (fun acc (c1,c2) -> addPair (c1, c2) acc) [] m
关于list - F# 将函数转换为使用高阶函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47018256/