Abstrasy
2.0 (beta)

Piste: if
 

if

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.


refs/lang/opindex/if.txt · Dernière modification: 2015/06/27 22:29 par admin

Retour
Table des matires

 

     
Licence Creative Commons
   Get abstrasy at SourceForge.net. Fast, secure and Free Open Source software downloads