我今天对 F# 过滤功能有一点奇怪的体验。代码是:
let rec filter : ('a -> bool) -> 'a list -> 'a list =
fun isKept -> function
| [] -> []
| (x::xs) -> if isKept x then x::filter isKept xs
else filter isKept xs
let x = filter ((>) 1) [1; -5; -20; 30; -35; 40]
该代码返回
val x : int list = [-5; -20; -35]
问题是,当我在第一个参数 (> 1) 中传递一个条件时,我希望它会过滤掉第二个参数中大于 1 的任何列表元素,而不是相反。
有什么我看不到的明显清楚的东西吗?