2016-04-06 8 views
0
Prelude> find odd [2,4,7,9,11] 
Just 7 

Ich würde erwarten, dass dies [7,9,11] zurückkehren, da sie alle ungerade Zahlen sind. Warum gibt findJust 7 zurück?Warum findet Haskell immer nur ein Element?

Gibt es eine Möglichkeit, die odd Funktion zu sagen, um zurückzukehren, was ich erwarte?

+2

In solchen Fällen können Sie den Funktionstyp für Ihren Bedarf herauszufinden, sollten dann fragen [Hoogle] (https://www.haskell.org/hoogle). Für diese Aufgabe ist Suchparameter ** (a -> Bool) -> [a] -> [a] **. – ArthurVard

Antwort

3

Verwenden filter

> filter odd [2,4,7,9,11] 
[7, 9, 11] 
3

Sie suchen nach filter suchen, nicht find. Die Aufgabe von find ist es, die erste zu finden oder Sie wissen zu lassen, dass es keine gibt. Der Job von filter ist, eine Liste von allen von ihnen zu machen.

6

Vom documentation:

find Die Funktion nimmt ein Prädikat und eine Liste und gibt das erste Element in der Liste, um das passende Prädikat oder Nothing wenn kein solches Element ist.

Verwenden filter statt:

> filter odd [2,4,7,9,11] 
[7, 9, 11] 
Verwandte Themen