if
I sin enklaste form utvärderar villkoret if i Scheme ett test och kör, beroende på resultatet, ett av två möjliga kodblock. Den enklaste formen ser ut så här:
(if test-is-true
do-this)- Om
testutvärderas till sant (#t) körs kodblocket i consequent. Blocket kan returnera ett värde eller utföra andra åtgärder, till exempel tilldela en variabel eller skriva ut.
Exempel
(if (< 0 1)
(lumi-message "True!"))- Här är
test(< 0 1)(kontroll om 0 är mindre än 1). - Eftersom testet utvärderas till sant (
#t) körs(lumi-message "True!"), vilket skriver ut"True!".
Lägga till else: if-else
När if har ett alternativt kodblock (fallet else) ser strukturen ut så här:
(if test
do-this
else-do-this)- Om
testutvärderas till sant (#t) körs consequent. - Om
testutvärderas till falskt (#f) körs alternative.
(if test
consequent
alternative)Så fungerar det
Testuttryck:
testutvärderas först.
Resultat baserat på test:
- Om
testutvärderas till sant (#t) körs consequent. - Om
testutvärderas till falskt (#f) körs alternative.
- Om
Både consequent och alternative kan utföra vilket giltigt Scheme-uttryck 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). - Eftersom testet är sant (
#t) körs consequent (1) och dess värde returneras.
Resultat: 1
Exempel 2: utvärdera ett begin-block
När flera åtgärder behövs i ett villkor kan du gruppera dem med begin eller let.
(if (= 0 1)
(begin
(lumi-message "This won't run")
1)
(begin
(lumi-message "False condition met, calculating...")
(* 3 4)))- Här är
test(= 0 1). - Eftersom testet är falskt (
#f) körs alternative:- Först skrivs
"False condition met, calculating..."ut. - Sedan beräknas
(* 3 4)och12returneras.
- Först skrivs
Resultat: Skriver ut “False condition met, calculating…” och returnerar 12.
Exempel 3: utvärdera ett let-uttryck
Med let kan du deklarera lokala variabler i 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)))- Här är
test(= 1 1). - Eftersom testet är sant (
#t) körs consequent:- Först skrivs
"True condition met, calculating..."ut. - Sedan beräknas
(* -1 10)och-10returneras.
- Först skrivs
Resultat: Skriver ut “True condition met, calculating…” och returnerar -10.
Sammanfattning
- Villkoret
ifär ett kraftfullt verktyg i Scheme för att utvärdera test och köra motsvarande kodblock. - Det hanterar både enkla uttryck och komplexa kodblock som returnerar värden, ändrar variabler eller utför bieffekter.
- Utan explicit
elsekörs consequent endast om testet är sant; annars alternative.