Abstrasy
2.0 (beta)

Piste: forever 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