如何使用set.fold或set.foldback定义与set.toList等效的函数toList? 我已经完成了这个功能,但我非常肯定它不正确。
let toList predicate items =
List.foldBack (fun item state ->
match predicate item with
| false -> state
| true -> item::state
)
items
[]
//test
toList (fun x -> x > 0) [-2;-1;0;1;2]
//output
//val toList : predicate:('a -> bool) -> items:'a list -> 'a list
//val it : int list = [1; 2]
任何提示/帮助?
答案 0 :(得分:1)
下面的函数应该与Set.toList
相同let toList set = Set.foldBack (fun it acc -> it::acc) set []
使用Set.fold而不是Set.foldBack会颠倒结果列表的顺序。
您当前的函数会根据谓词过滤列表,相当于List.filter。