als
In zijn eenvoudigste vorm evalueert de voorwaarde if in Scheme een test en voert op basis van het resultaat een van de twee mogelijke codeblokken uit. De eenvoudigste vorm ziet er als volgt uit:
(if test-is-true
do-this)- Als de
testevalueert naar true (#t), wordt het codeblok in de consequentie uitgevoerd. Het blok kan een waarde retourneren of andere acties uitvoeren, zoals het toewijzen van een variabele of het afdrukken van uitvoer.
Voorbeeld
(if (< 0 1)
(lumi-message "True!"))- In dit geval is
test(< 0 1)(controleren of 0 kleiner is dan 1). - Aangezien de test resulteert in waar (
#t), wordt het codeblok(lumi-message "True!")uitgevoerd, dat"True!"afdrukt.
Een andere voorwaarde toevoegen: if-else
Wanneer u een voorwaardelijk if gebruikt met een alternatief codeblok (het geval else), ziet de structuur er als volgt uit:
(if test
do-this
else-do-this)- Als
testresulteert in true (#t), wordt het consequente codeblok uitgevoerd. - Als
testonwaar is (#f), wordt het alternatieve codeblok uitgevoerd.
(if test
consequent
alternative)Hoe het werkt
Testexpressie:
- De
testexpressie wordt eerst geëvalueerd.
- De
Resultaat gebaseerd op test:
- Als
testresulteert in true (#t), wordt het consequente codeblok uitgevoerd. - Als
testonwaar is (#f), wordt het alternatieve codeblok uitgevoerd.
- Als
Zowel de codeblokken consequent als alternative kunnen elke geldige Scheme-bewerking uitvoeren, inclusief het retourneren van waarden, het wijzigen van variabelen of het uitvoeren van procedures.
Voorbeelden
Voorbeeld 1: Een waarde retourneren
(if (< 0 1)
1
0)- Hier is
test(< 0 1)(controleert of 0 kleiner is dan 1). - Aangezien de test resulteert in waar (
#t), wordt het consequent blok (1) uitgevoerd en wordt de waarde ervan geretourneerd.
Resultaat: 1
Voorbeeld 2: Een beginblok evalueren
In gevallen waarin u meerdere acties moet uitvoeren wanneer de voorwaarde waar of onwaar is, kunt u begin of een let gebruiken om ze te groeperen.
(if (= 0 1)
(begin
(lumi-message "This won't run")
1)
(begin
(lumi-message "False condition met, calculating...")
(* 3 4)))- In dit voorbeeld is
test(= 0 1)(er wordt gecontroleerd of 0 gelijk is aan 1). - Omdat de test false oplevert (
#f), wordt het alternatieve blok uitgevoerd:- Eerst wordt
"False condition met, calculating..."afgedrukt. - Vervolgens berekent het
(* 3 4)en retourneert12.
- Eerst wordt
Resultaat: Afgedrukt “Aan valse voorwaarde voldaan, berekening…” en retourneert 12.
Voorbeeld 3: Een verhuurverklaring evalueren
Door een let te gebruiken, kunnen we lokale scopevariabelen binnen het codeblok declareren.
(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 dit voorbeeld is
test(= 1 1)(er wordt gecontroleerd of 1 gelijk is aan 1). - Aangezien de test resulteert in waar (
#t), wordt het consequent blok uitgevoerd:- Eerst wordt
"True condition met, calculating..."afgedrukt. - Vervolgens berekent het
(* -1 10)en retourneert-10.
- Eerst wordt
Resultaat: Er wordt afgedrukt “Aan ware voorwaarde voldaan, berekening…” en retourneert -10.
Samenvatting- De voorwaarde if is een krachtig hulpmiddel in Scheme voor het evalueren van tests en het uitvoeren van overeenkomstige codeblokken.
- Het kan zowel eenvoudige expressies als complexe codeblokken verwerken die waarden retourneren, variabelen wijzigen of bijwerkingen veroorzaken.
- Onthoud: als er geen expliciet
elseblok is, evalueert en voertifalleen het gevolg uit als de test waar is. Anders wordt het alternatief geëvalueerd en uitgevoerd.