高阶函数 toList

higher-order-function toList

如何使用 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]

任何tips/help?

下面的函数应该与Set.toList

执行相同的操作
let toList set = Set.foldBack (fun it acc -> it::acc) set []

使用 Set.fold 而不是 Set.foldBack 会颠倒结果列表的顺序。

您当前的函数具有根据谓词过滤列表的效果,相当于 List.filter。