Wenn
In seiner einfachsten Form wertet die Bedingung if in Scheme einen Test aus und führt basierend auf dem Ergebnis einen von zwei möglichen Codeblöcken aus. Die einfachste Form sieht so aus:
(if test-is-true
do-this)– Wenn das test als wahr ausgewertet wird (#t), wird der Codeblock in der Folge ausgeführt. Der Block kann einen Wert zurückgeben oder andere Aktionen ausführen, z. B. das Zuweisen einer Variablen oder das Drucken von Ausgaben.
Beispiel
(if (< 0 1)
(lumi-message "True!"))- In diesem Fall ist
test(< 0 1)(überprüft, ob 0 kleiner als 1 ist). - Da der Test „true“ ergibt (
#t), wird der Codeblock(lumi-message "True!")ausgeführt, der"True!"ausgibt.
Hinzufügen einer Else-Bedingung: if-else
Bei Verwendung einer if-Bedingung mit einem alternativen Codeblock (der else-Fall) sieht die Struktur wie folgt aus:
(if test
do-this
else-do-this)– Wenn das test als wahr ausgewertet wird (#t), wird der konsequente Codeblock ausgeführt.
– Wenn test als falsch ausgewertet wird (#f), wird der alternative Codeblock ausgeführt.
(if test
consequent
alternative)Wie es funktioniert
Testausdruck:
- Der Ausdruck
testwird zuerst ausgewertet.
- Der Ausdruck
Ergebnis basierend auf Test: – Wenn das
testals wahr ausgewertet wird (#t), wird der konsequente Codeblock ausgeführt.- Wenn
testals falsch ausgewertet wird (#f), wird der alternative Codeblock ausgeführt.
- Wenn
Sowohl die Codeblöcke consequent als auch alternative können jede gültige Scheme-Operation ausführen, einschließlich der Rückgabe von Werten, der Änderung von Variablen oder der Ausführung von Prozeduren.
Beispiele
Beispiel 1: Einen Wert zurückgeben
(if (< 0 1)
1
0)- Hier ist
test(< 0 1)(überprüft, ob 0 kleiner als 1 ist). - Da der Test „true“ ergibt (
#t), wird der konsequente Block (1) ausgeführt und sein Wert zurückgegeben.
Ergebnis: 1
Beispiel 2: Auswertung eines begin-Blocks
In Fällen, in denen Sie mehrere Aktionen ausführen müssen, wenn die Bedingung wahr oder falsch ist, können Sie begin oder let verwenden, um sie zu gruppieren.
(if (= 0 1)
(begin
(lumi-message "This won't run")
1)
(begin
(lumi-message "False condition met, calculating...")
(* 3 4)))- In diesem Beispiel ist
test(= 0 1)(überprüft, ob 0 gleich 1 ist). – Da der Test „falsch“ ergibt (#f), wird der alternative Block ausgeführt:- Zuerst wird
"False condition met, calculating..."gedruckt. - Anschließend wird
(* 3 4)berechnet und12zurückgegeben.
- Zuerst wird
Ergebnis: Gibt „Falsche Bedingung erfüllt, Berechnung…“ aus und gibt 12 zurück.
Beispiel 3: Auswertung einer let-Anweisung
Durch die Verwendung eines let können wir lokale Bereichsvariablen innerhalb des Codeblocks deklarieren.
(if (= 1 1)
(let (x -1)
(lumi-message "True condition met, calculating...")
(* x 10))
(let (y 4)
(lumi-message "This won't run")
(* 3 y)))- In diesem Beispiel ist
test(= 1 1)(überprüft, ob 1 gleich 1 ist). – Da der Test „true“ ergibt (#t), wird der konsequente Block ausgeführt:- Zuerst wird
"True condition met, calculating..."gedruckt. - Anschließend wird
(* -1 10)berechnet und-10zurückgegeben.
- Zuerst wird
Ergebnis: Gibt „Wahre Bedingung erfüllt, Berechnung…“ aus und gibt -10 zurück.
Zusammenfassung- Die Bedingung if ist ein leistungsstarkes Tool in Scheme zum Auswerten von Tests und zum Ausführen entsprechender Codeblöcke.
– Es kann sowohl einfache Ausdrücke als auch komplexe Codeblöcke verarbeiten, die Werte zurückgeben, Variablen ändern oder Nebenwirkungen ausführen.
- Denken Sie daran: Wenn es keinen expliziten
else-Block gibt, wertet derifdie Konsequenz nur aus und führt sie aus, wenn der Test wahr ist. Andernfalls wertet es die Alternative aus und führt sie aus.