ET ou OU
Comparaison d'une liste d'expressions, de la gauche vers la droite.
Le ET (and) renvoie T si toutes les expressions vérifient le test,
Le OU (or) renvoie T si une seule des expressions est nulle,
La fonction évalue les expressions en recherchant une expression non nulle, si elle en trouve une elle interrompt son évaluation et renvoie T.
Si toutes les expressions sont nulles (or) renvoie nil.
Syntaxe : (and [expression1 expression2 expression...])
valeur renvoyée : T ou nil
Syntaxe : (or[expression1 expression2 expression...])
valeur renvoyée : T ou nil
Définition des variables pour les deux exemples :
(setq a 100 b nil c "chaîne") |
On est d'accord ? : a contient 100, b est à nil et c contient "chaine".
Exemple AND :
(and a c) |
Renvoie T car ET la variable "a" n'est pas à nil et la variable "c" n'est pas à nil
(and a b c) |
Renvoie nil car bien que la variable "a" n'est pas à nil et la variable "c" n'est pas à nil non plus, la variable "b" est à nil.
Donc avec la fonction (and) une seule expression à nil renvoie nil pour cet appel de (and).
Évaluation de "court-circuit" (short-circuit evaluation).
(and a b c) retourne nil (parce que b est nil) et arrête là l'évaluation (c n'est pas évalué inutilement).
Et dans le cas suivant que va-t'il se passer ?
Quel sera le message de la case de dialogue ?
1 2 3 4 | (if (and a c) (alert "les variables a et c sont renseignées") (alert "une des deux variables a et c n'est pas renseignée (ou les deux)") ) |
Exemple OR :
1 | (or a c) |
Renvoie T car OU la variable "a" n'est pas à nil OU la variable "c" n'est pas à nil
(or a b c) |
Renvoie nil car bien que la variable "a" n'est pas à nil et la variable "c" n'est pas à nil non plus, la variable "b" est à nil donc une seule expression est nulle et la fonction renvoie nil .
7 décembre 2017,
mise à jour le 15 décembre 2017,
correction minime le 16 février 2019.