om
I sin enklaste form utvärderar if villkoret i Schema ett test och, baserat på resultatet, exekverar ett av två möjliga kodblock. Den enklaste formen ser ut så här:
(if test-is-true
do-this)- Om
testevalueras till sant (#t), exekveras kodblocket i efterföljande. Blocket kan returnera ett värde eller utföra andra åtgärder, såsom att tilldela en variabel eller skriva ut.
Exempel
(if (< 0 1)
(lumi-message "True!"))- I det här fallet är
test(< 0 1)(kontrollerar om 0 är mindre än 1). - Eftersom testet utvärderas till sant (
#t), exekveras kodblocket(lumi-message "True!"), vilket skriver ut"True!".
Lägga till ett annat villkor: if-else
När du använder en if villkorlig med ett alternativt kodblock (else-fallet), ser strukturen ut så här:
(if test
do-this
else-do-this)- Om
testevalueras till sant (#t), exekveras kodblocket följande. - Om
testevalueras till falskt (#f), exekveras det alternativa kodblocket.
(if test
consequent
alternative)Hur det fungerar
Testuttryck:
test-uttrycket utvärderas först.
Resultat baserat på test:
- Om
testevalueras till sant (#t), exekveras följande kodblock. - Om
testevalueras till falskt (#f), exekveras det alternativa kodblocket.
- Om
Både consequent och alternative kan utföra vilken giltig Scheme-operation som helst, inklusive att returnera värden, ändra variabler eller köra procedurer.
Exempel
Exempel 1: Returnera ett värde
(if (< 0 1)
1
0)- Här är
test(< 0 1)(kontrollerar om 0 är mindre än 1). - Eftersom testet utvärderas till sant (
#t), exekveras blocket följande (1) och dess värde returneras.
Resultat: 1
Exempel 2: Utvärdera ett startblock
I fall där du behöver utföra flera åtgärder när villkoret är sant eller falskt, kan du använda begin eller en let för att gruppera dem.
(if (= 0 1)
(begin
(lumi-message "This won't run")
1)
(begin
(lumi-message "False condition met, calculating...")
(* 3 4)))- I det här exemplet är
test(= 0 1)(kontrollerar om 0 är lika med 1). - Eftersom testet utvärderas till falskt (
#f), exekveras det alternativa blocket:- Först skriver den ut
"False condition met, calculating...". - Sedan beräknar den
(* 3 4)och returnerar12.
- Först skriver den ut
Resultat: Skriver ut “Falskt villkor uppfyllt, beräknar…” och returnerar 12.
Exempel 3: Utvärdera ett utlåtande
Genom att använda en let kan vi deklarera lokala scope-variabler inom kodblocket.
(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)))- I det här exemplet är
test(= 1 1)(kontrollerar om 1 är lika med 1). - Eftersom testet utvärderas till sant (
#t), exekveras följande-blocket:- Först skriver den ut
"True condition met, calculating...". - Sedan beräknar den
(* -1 10)och returnerar-10.
- Först skriver den ut
Resultat: Skriver ut “True condition uppfyllt, beräknar…” och returnerar -10.
Sammanfattning- if är ett kraftfullt verktyg i Scheme för att utvärdera tester och exekvera motsvarande kodblock.
– Den kan hantera både enkla uttryck och komplexa kodblock som returnerar värden, modifierar variabler eller utför biverkningar.
- Kom ihåg: Om det inte finns något explicit
else-block, utvärderar och utförifendast följande om testet är sant. Annars utvärderar och exekverar den alternativet.