L'opérateur if est utilisé pour construire les structures de contrôle de branchements conditionnels «si… alors…», «si… alors… sinon…» et «si… alors… sinon si…».
Sa forme courante est la suivante:
(if {<vérité>} {<faire-si-vrai>} [else {<faire-si-faux>}])
Il existe également une forme un peu plus complexe pour construire la structure générale «si… alors… sinon si…»:
(if {<vérité-1>} {<faire-si-vrai>} elif {<vérité-2>} {<faire-si-vrai>} [elif …[ else {<faire-si-faux>}]…])
La forme la plus simple est «si… alors…» où l'expression paresseuse <faire-si-vrai> est évaluée si la valeur de vérité de l'expression <vérité> est «vrai». Si la valeur de <vérité> est «fausse», l'évaluation se poursuit à l'expression suivante.
(if{=? x 1} { (display "x est égal à 1.") })
Bien entendu, on peut étendre l'expression en ajoutant une clause else. Dans ce cas, l'expression paresseuse <faire-si-faux> sera évaluée si <vérité> s'avère «faux».
(if{=? x 1} { (display "x est égal à 1.") } else { (display "x n'est pas égal à 1.") })
Enfin, on peut aussi étendre la structure à volonté en utilisant la clause elif qui permet de tester un nombre illimité de vérités. Dès lors qu'une vérité est «vraie», l'expression paresseuse correspondante est évaluée puis l'exécution se poursuit à l'expression suivante.
(if{=? x 1} { (display "x est égal à 1.") } elif {=? x 2} { (display "x est égal à 2.") } else { (display "x n'est ni égal à 1, ni égal à 2.") })
La structure if-elif-else peut aussi être utilisée directement avec des variables ou de des constantes.
Ainsi, l'exemple suivant est correct également:
(define '$x (true)) (define 'r "TRUE") (display (if $x r))
On notera toutefois que dans ce cas, les symboles sont résolus au fur et à mesure de l'évaluation de la structure. De plus, si un symbole est assigné à une expression paresseuse, celle-ci est évaluée. Pour inhibé son évaluation, il faut soit imbriqué le symbole de l'expression ou utiliser l'opérateur as-value pour retourner le résultat en tant que résultat uniquement.
(define '$x (true)) (define 'r {"True"}) (display (if $x r)) (display (if $x {r})) (display (if $x {as-value r})
⇒
True {"True"} {"True"}
Cette particularité permet cependant de déterminer dynamiquement les opérations à effectuer.
(define '$l "FR") (define '$x (true)) (define 'r (if{=? $l "FR"} {as-value {"Vrai"}} else{as-value {"True"}})) (display (if $x r))
⇒
Vrai
Dans l'exemple ci-dessus, r reçoit l'expression {“Vrai”} ou {“True”} en fonction de la valeur de $l.
Ensuite, le symbole r est résolu dans la structure if, où {“Vrai”} est évaluée.
|
![]() |
|
||||||||