Cond
In Schema wordt de voorwaarde cond gebruikt voor het selecteren van een van de verschillende mogelijke codeblokken om uit te voeren, op basis van meerdere tests. Het is als een multi-filiaal if, waarbij elke tak op volgorde wordt gecontroleerd totdat er een match is gevonden.
Syntaxis
(cond
(test-1 consequent-1)
(test-2 consequent-2)
...
(else fallback-consequent))- Elke test wordt geëvalueerd in de volgorde waarin deze is geschreven.
- Wanneer een test resulteert in true (
#t), wordt het bijbehorende consequent uitgevoerd en stopt decondexpressie met het evalueren van verdere tests. - De clausule
elseis optioneel en dient als reserve als geen van de tests waar is.
Hoe het werkt
Elke voorwaarde testen:
condevalueert de tests in de volgorde waarin ze worden vermeld.
Voer het overeenkomende gevolg uit:
- Wanneer de eerste test die resulteert in waar (
#t) wordt gevonden, wordt het consequent ervan uitgevoerd. - Als geen enkele test de uitkomst True oplevert en er een
else-clausule is, wordt de fallback-consequent uitgevoerd.
- Wanneer de eerste test die resulteert in waar (
Voorbeelden
Voorbeeld 1: Gevolgen van een enkele expressie
(cond
((< 3 2) "This won't run")
((= 3 3) "This will run")
(else "Fallback"))- De eerste test
(< 3 2)resulteert in false (#f). - De tweede test
(= 3 3)resulteert in true (#t), dus"This will run"wordt geretourneerd. - De clausule
elsewordt niet uitgevoerd omdat er al een overeenkomst is gevonden.
Resultaat: “Dit wordt uitgevoerd”
Voorbeeld 2: Meerdere acties met begin
Als een gevolg meerdere acties omvat, gebruik dan begin om ze te groeperen:
(cond
((< 5 3)
(begin
(lumi-message "This won't run")
(* 2 3)))
((> 5 3)
(begin
(lumi-message "Condition met")
(* 5 5)))
(else
(begin
(lumi-message "Fallback")
0)))- De eerste test
(< 5 3)resulteert in false (#f). - De tweede test
(> 5 3)resulteert in waar (#t):- Er wordt
"Condition met"afgedrukt. - Vervolgens berekent het
(* 5 5)en retourneert25.
- Er wordt
Resultaat: Afgedrukt “Aan voorwaarde voldaan” en retourneert 25.
Voorbeeld 3: Een let blok als gevolg gebruiken
Wanneer u lokale variabelen moet invoeren, gebruikt u een let blok:
(cond
;; Case 1: If 0 is less than -1
((< 0 -1)
(let ((x 10))
(* x x)))
;; Case 2: If 0 is greater than -1
((> 0 -1)
(let ((y 20))
(lumi-message "Positive condition met")
(+ y y)))
;; Default case: If none of the above conditions are met
(else
(let ((z 0))
z)))- De eerste test
(< 0 -1)is onwaar. - De tweede test
(> 0 -1)is waar, dus:- Er wordt een
letblok uitgevoerd, waarbijywordt gekoppeld aan20. - Er wordt
"Positive condition met"afgedrukt. - Vervolgens berekent het
(+ y y)en retourneert40.
- Er wordt een
Resultaat: Er wordt ‘Aan positieve voorwaarde voldaan’ afgedrukt en retourneert 40.
Voorbeeld 4: Terugval met else
(cond
((< 5 3) "This won't run")
((= 5 3) "This won't run either")
(else "Fallback value"))- Geen van de eerste twee tests levert waar op.
- De clausule
elsewordt uitgevoerd en retourneert"Fallback value".
Resultaat: “Fallback-waarde”
Samenvatting
- Gebruik
condom meerdere voorwaarden op een duidelijke en beknopte manier af te handelen. - Gevolgen kunnen afzonderlijke uitdrukkingen zijn of gegroepeerde acties met
begin. - Gebruik
letin consequents om lokale variabelen voor berekeningen te declareren. - Neem altijd een
else-clausule op als reserve voor het afhandelen van onverwachte gevallen.
Deze flexibiliteit maakt cond een krachtig en leesbaar hulpmiddel voor het verwerken van complexe vertakkingslogica.