高阶函数toList

时间:2015-10-15 12:24:18

标签: f# f#-interactive

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

任何提示/帮助?

1 个答案:

答案 0 :(得分:1)

下面的函数应该与Set.toList

相同
let toList set = Set.foldBack (fun it acc -> it::acc) set []

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

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