Ich habe heute etwas seltsame Erfahrung mit der F # -Filterfunktion. Der Code ist:F # -Filterfunktion - der Zustand des ersten Arguments scheint umgekehrt zu sein
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]
Dieser Code gibt
val x : int list = [-5; -20; -35]
Problem ist, wie ich eine Bedingung in dem ersten Argument (> 1) übergeben, erwarte ich es alle Listenelemente des zweiten ausfiltern würde Argument, die größer 1 sind, nicht umgekehrt.
Gibt es etwas offensichtlich klar, dass ich nicht erkennen konnte?
Schön, dank;) – user2431438
Beachten Sie, dass das Komplement von '(>)' ist nicht '(<)' aber '(<=)'. – Frank
@Frank Sie sind richtig - aber die Frage sagt 'Ich erwarte, dass es alle Listenelemente des zweiten Arguments ausfiltert, die größer [als] 1 sind. So wird '(<)' benötigt, um das richtige Ergebnis zu erhalten. –