Table des matières

Compositionnalité et valeur de vérité

La notion de valeur de vérité consiste à attribuer au résultat d'une expression une valeur booléenne (true) ou (false) en fonction de la manière dont on considère ce résultat équivalent à «vrai» ou à «faux», et cela même si celui-ci n'est pas booléen. Il s'agit du principe de compositionnalité.

La compositionnalité est un outil de calcul qui peut être implémenté de plusieurs manière et à plusieurs niveaux.

Le langage Abstrasy utilise ce principe dans les opérations de contrôle du flux de l'évaluation. Ainsi, dans l'exemple suivant, la boucle s'arrête lorsque le contenu de la variable $x est zéro.

(define '$x 10)
(while{$x}
  {
    (display $x)
    (set! $x (- $x 1))
  }
)

En effet, Abstrasy considère que la valeur de vérité du nombre zéro est équivalente à «faux» alors que toutes les autres correspondent à «vrai».

Ceci permet d'éliminer des prédicats et de rendre le code plus simple et plus performant. On aurait effectivement le même résultat avec le code suivant, mais avec une écriture moins concise tout en nécessitant plus de calculs.

(define '$x 10)
(while{<>? $x 0)}
  {
    (display $x)
    (set! $x (- $x 1))
  }
)


Valeur de vérité dans un contexte scalaire

En effet, l'interpréteur applique le principe de compositionnalité que le résultat de l'expression évaluée soit booléen ou non. Ainsi, même si le résultat d'un prédicat est (true) ou (false), c'est la valeur de vérité qui correspond à ces propositions dans le contexte scalaire booléen qui est retenu. Dans ce contexte, (false) correspond à «faux».

Bien sûr, il y a d'autres contextes scalaires:

On applique également un principe analogue pour les nombres longs (les types long-int et long-float) où la valeur «zéro» correspond aussi à «faux».

Pour ce qui est de (nothing), si valeur de vérité est toujours «faux». Par contre, dans un contexte de chaîne de caractères ou de liste, on considère une chaîne de caractères vide ““ ou un tuple vide [], comme «faux».

Pour obtenir la valeur de vérité d'une donnée sous la forme d'un booléen, on peut utiliser le prédicat truth?. Dans la plupart des cas, ce sera le contexte scalaire du type de la donnée qui sera considéré par défaut.

Type Contexte scalaire Valeur pour «faux» Valeurs pour «vrai»
boolean Booléens {(true) ; (false)} (false) (true)
int Entiers [ -2147483648 ; 2147483647 ] 0 Toutes les autres valeurs ou -1.
long-int Entiers longs [ -9223372036854775808 ; 9223372036854775807 ] 0L Toutes les autres valeurs ou -1L.
float Flottants [ -1.7976931348623157E308 ; 1.7976931348623157E308 ] 0.0 Toutes les autres valeurs ou -1.0.
long-float Flottants longs [ -1.0E+2147483647L ; 1.0E+2147483647L ] 0.0L Toutes les autres valeur ou -1.0L.
string Chaîne de caractères ”“ (chaîne vide) Toute chaîne qui contient au moins un caractère.
tuple Tuple1) [] (tuple vide) Tous tuple qui contient au moins un élément.
nothing Nothing (nothing) N'existe pas.

Bien sûr, les données de type abstrait ou redex comme les opérateur, les symboles, les expressions ou les fonctions n'ont pas de contexte scalaire où leur valeur de vérité peut être mesurée. Cela n'aurait d'ailleurs pas de sens. Calculer (truth? +) n'a en effet aucun sens et (truth? (+ 2 3)) ne permet pas de déterminer la valeur de vérité de l'expression (+ 2 3) en tant qu'expression, mais uniquement son résultat 5 qui correspond alors à «vrai».

1)
et autres collections