2016-04-25 6 views
-1

Ich muss eine Funktion all' :: (a -> Bool) -> [a] -> Bool definieren, die überprüft, ob alle Elemente aus einer Liste eine bestimmte Bedingung erfüllen.Wie die "alle" Funktion in Haskell neu zu implementieren?

Zum Beispiel: all' (<5) [1,2,3] = True, all' (>=2) [1,1,2,2,3,3] = Falsch.

Mein Hauptproblem ist, dass ich nicht weiß, wie man mit der Übertragung einer Funktion umgeht.

Antwort

5

Funktionen in Haskell werden wie jeder andere Wert übergeben. Hier ist ein Beispiel, um Sie Fortschritt:

doBothSatisfy :: (a -> Bool) -> a -> a -> Bool 
doBothSatisfy p x y = (p x) && (p y) 

Und nun die Nutzung:

doBothSatisfy (> 5) 6 7 == True 
doBothSatisfy (> 5) 1 8 == False 

nun versuchen, das zu Listen zu erweitern.

+1

Vielen Dank für die Antwort so schnell. Meine Programme sehen so aus: ** Alternative 1 **: 'all ':: (a-> Bool) -> [a] -> Bool alle' fct [] = Wahr alle 'fct (x: xs) = (fct x) && (alle 'fct xs) ' ** Alternative 2 **: ' alle' ': :(a-> Bool) -> [a] -> Bool alle' 'f [] = Falsch alle '' f (x: []) = wenn fx dann wahr sonst falsch alle '' f (x: xs) = wenn fx dann alle '' f xs sonst Falsch' – Andro

+0

@kissylips wenn du das leer machst Wenn der Fall "True" ist, können Sie die 2. Bedingung loswerden. –

+0

@kissylips sieht korrekt aus. Nur ein paar Hinweise: 'x: []' kann auch als '[x]' geschrieben werden (Klammern können sowohl zum Erstellen als auch zum Mustervergleich verwendet werden). Auch wenn "was auch immer dann wahr oder falsch ist" ist immer dasselbe wie "was auch immer". Auch ein guter Ort, um kleine Bits Code zu setzen, ist http://lpaste.net/. – PyRulez

Verwandte Themen