今日、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) に条件を渡すと、2 番目の引数の 1 より大きいリスト要素が除外されることであり、その逆ではないことが予想されます。
私が見つけられなかった明確なものはありますか?