,

shortcut

L'opérateur shortcut permet de construire une structure d'évaluation «court-circuit».


Sa forme courante est la suivante:

(shortcut {<faire>} [ … {<faire-si-les-précédents-sont-sans-résultat>}])


Le principe d'une structure «court-circuit» est très simple: Chaque expression paresseuse est évaluée une par une en allant de gauche à droite jusqu'à ce qu'un résultat soit obtenu.

On considère qu'une expression retourne un résultat, si le prédicat something? peut retourner TRUE par rapport résultat de l'évaluation de cette expression.

Dès lors qu'une expression fournit un résultat, l'évaluation s'arrête et les éventuelles expressions suivantes sont tout simplement ignorées. L'expression shortcut retourne ainsi le premier résultat obtenu. Bien sûr, si aucune expression ne permet d'obtenir un résultat, on sait déjà qu'elles seront toutes évaluées et que shortcup ne retournera pas de résultat.

Cette structure est intéressante car elle permet d'ordonner la recherche d'un résultat à l'aide de moyens ou de méthodes différentes. On peut donc s'en servir pour fixer un résultat par défaut après une recherche exhaustive impliquant plusieurs méthodes de recherche différentes. shortcut est par conséquent idéal pour fixer un résultat alternatif par défaut.

(define 'a 1)
(define 'b 1)
(define 'c 
  (shortcut 
    {(display "1")(if{=? a 0} {"a = 0"})}
    {(display "2")(if{=? b 0} {"b = 0"})}
    {(display "3")(if{=? a b} {"a = b"})}
    {(display "4") "Oups..."}
  )
) 
(display c)
})

1
2
3
a = b

Il est vrai que l'exemple ci-dessus est particulièrement trivial. Toutefois, il permet de comprendre le principe du shortcut.

On peut indiquer autant d'alternatives que nécessaire. Toutefois, lorsqu'un résultat est obtenu, l'évaluation de la structure s'arrête. De cette manière on peut s'assurer qu'un résultat alternatif sera obtenu s'il est probable qu'une méthode de recherche n'en retourne pas.

(define 'x 
  (shortcut 
    {display "1"}
    {display "2"}
    {"Résultat par défaut"}
    {display "Court-ciruit : Cette expression n'est pas évaluée!"}
  )
) 
(display x)
})

1
2
Résultat par défaut

On comprend aisément qu'il est important d'ordonner judicieusement les expressions à évaluer. Le but est d'éviter, si possible, de devoir les évaluer toutes.

De plus, si on insère une expression dont l'existence d'un résultat est sûr en plein milieu d'une structure shortcut, les expressions qui suivent ne seront jamais évaluées. C'est un peu comme si on évaluait (if{true} {“toujours”} else{“jamais”}). Dans une situation semblable, une partie de l'expression ne sera jamais évaluée. Il appartient donc au programmeur d'établir l'ordre de recherche du résultat de manière à ce qu'il soit efficace et cohérent.