5

今日、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 より大きいリスト要素が除外されることであり、その逆ではないことが予想されます。

私が見つけられなかった明確なものはありますか?

4

1 に答える 1