Haskell IF-Anweisungen
Ich bin Recht neu in haskell, aber wenn Sie eine if-Anweisung:
function a b c
| (a+b == 0) = True
| --etc.
| otherwise = False
Ist die zweite wenn-Anweisung das gleiche wie ein anderes, wenn auch in anderen Sprachen, oder ist es nur ein weiteres wenn. Ich nehme an, seine ehemaligen wie können Sie nur einen Ausgang, aber ich möchte einfach sicher zu stellen.
- Ja, Ihre Argumentation auf dem richtigen Weg war. Was würde es bedeuten, zu mehr als einer rechten Seite "ausgeführt"? Es gibt keine Nebenwirkungen, so dass alles, was wir "tun" müssen wir zurück. Welchen Wert würden wir zurückkehren? Oder wir müssten eine Möglichkeit haben, Sie zu kombinieren... welchen Weg würden wir verwenden? (Nur ein paar Fragen, um Sie zu führen, um Haskell-Philosophie)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem konstruieren Sie verwendet wird, heißt ein guard. Haskell überprüft die vorgegebenen alternativen eine nach der anderen, bis eine Bedingung Erträge
True
. Es wertet die Rechte Seite der Gleichung.Konnte man Recht gut schreiben
damit die guard-Art von stellt ein if/elseif Konstrukt aus anderen Sprachen. Als
otherwise
ist einfach definiert alsTrue
die letztenwird immer wahr sein und daher ist eine catch-all -
else
- Klausel.Nichtsdestotrotz Haskell hat eine übliche
a = if foo then 23 else 42
- Anweisung.else
Teilif
Aussagen ist obligatorisch. Siehe Haskell 2010: Bedingungen. Und dann gibt ' s "als" und "wenn"Was Sie hier haben, ist nicht wirklich eine if-Anweisung, sondern eine Wache. Aber Sie haben Recht, dass der zweite Fall wird "ausgeführt", nur wenn die vorherigen Fälle (von Fällen, hier meine ich die Ausdrücke zwischen den
|
und=
) passten nicht (auswerten zuTrue
).otherwise
ist nur eine synonyme zuTrue
(so ist es immer "entspricht").Es sein muss, wie ein anderes wenn.
Unten Muster
otherwise
ist wirklich nurTrue
, so dass, wenn das erste Spiel nicht gewinnen, würden Sie bekommen immer mehr bestimmten Wert und der sonst-Wert.Richtig. Wenn Sie verwendet haben, Wachen, die Art und Weise haben Sie es ausgedrückt hat, ist mehr oder weniger identisch mit der Verwendung einer if-Anweisung. Der Fluss der Prüfung der bedingten Ertrag Ergebnis fallen durch die Wache, die Sie geschrieben haben, in der Reihenfolge, wie Sie aufgeführt wurden, in Ihre Wache.
Wird zuerst geprüft
Geprüft werden, die zweite, und so weiter, sofern keine vorhergehende Bedingung wahr ist.
Wird überprüft, letzten, sofern keine vorhergehende Bedingung wahr ist.