J'apprends Prolog, et je ne comprends pas pourquoi ?- [] = _.
renvoie true dans SWI-Prolog. []
signifie une liste vide, et _
signifie qu'il n'est pas vide, non?
Quelqu'un pourrait-il expliquer la logique ci-dessus?Pourquoi est-ce que [] = _. vrai dans Prolog?
Répondre
_
est une variable logique, tout comme X
ou toute autre chose qui commence par un trait de soulignement ou une lettre majuscule. Les variables libres (c'est-à-dire, les variables qui ne sont pas déjà liées à un terme) peuvent être unifiées avec n'importe quoi. Un objectif comme [] = X
dit "unifier X
avec []
", avec l'effet que, si cela réussit, chaque utilisation de X
se référera au terme []
.
Avec _
comme variable c'est le même que pour X
, à l'exception que _
est la variable anonyme : Il ne peut pas être réutilisé, son nom n'a pas d'importance, et les différentes occurrences de _
se réfèrent à des variables différentes. Donc, _
ne peut jamais être lié avant de rencontrer l'objectif [] = _
. Ainsi cette unification réussit, c'est pourquoi vous obtenez la réponse true
.
_
ne signifie pas en soi "non vide". Mais vous pouvez être dérouté par son utilisation comme un espace réservé: L = [_,_,_]
signifie que L
est une liste de trois éléments (dont nous ne savons rien). En ce sens _
signifie "il y a quelque chose ici". Mais il doit être à l'intérieur la liste pour cette signification.
Une liste arbitraire et anonyme non vide serait représentée par '[_ | _]', qui est une liste avec une tête anonyme et une queue anonyme. '_' par lui-même unifie avec n'importe quoi. '1 = _.',' a (b, c) = _.' et 'x = _.' sont également tous vrais. – lurker