2017-07-13 1 views
3

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?

+0

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

Répondre

9

_ 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.