Mam dziwne doświadczenie z funkcją filtru F # już dziś. Kod jest:F # funkcja filtru - warunek pierwszego argumentu wydaje się być odwrócony
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]
Ten kod zwraca
val x : int list = [-5; -20; -35]
Problem jest, jak mijam warunek w pierwszym argumencie (> 1), spodziewam się, że to odfiltrować żadnych elementów lista sekundę argument, który jest większy 1, a nie odwrotnie.
Czy jest coś oczywistego, czego nie mogłem zauważyć?
Piękny, dzięki;) – user2431438
pamiętać, że uzupełnienie '(>)' nie jest '(<)' ale '(<=)'. – Frank
@Frank Masz rację - ale pytanie brzmi "Oczekuję, że odfiltrowałoby jakiekolwiek elementy listy drugiego argumentu, które są większe niż [1]". Więc '(<)' jest potrzebne, aby uzyskać poprawny wynik. –