1 Introduction à la programmation logique
1.1 Concepts de base
Écrire un programme en Prolog consiste essentiellement à définir un ensemble d’entités et des relations entre ces entités. Pour se référer à une entité, on utilise des termes. Un terme est une constante, une variable ou un terme composé :
– Constante : Désigne une entité du monde. Tout identificateur qui commence par une lettre minuscule est une constante. Si on veut utiliser une constante qui commence par une lettre majuscule, il faudra la délimiter par des apostrophes.
Exemples : paulo, 3, ’UFPR’.
– Variable : En Prolog, une variable sert à désigner une entité inconnue mais qui existe. Aussitôt que cette entité devient connue (on dira alors que la variable est instanciée), elle sera toujours associée à celle-ci. Ceci est différent du concept de variable dans les langages traditionnels de programmation (comme C++), où le contenu d’une variable peut changer. En Prolog, une variable est n’importe quel identificateur qui commence par une lettre majuscule. Une variable peut aussi commencer par le symbole "_" (il s’agira alors d’une variable anonyme, comme on le verra plus tard).
– Terme composé : Formé par une constante fonctionnelle (aussi appelée foncteur) et des arguments qui sont eux-mêmes des termes, il sert à désigner indirectement une entité du monde. Par exemple, en utilisant un foncteur suc et la constante 0, on peut représenter les nombres naturels. La valeur 1, qui est le successeur de 0, serait représentée par le terme suc(0). Le numéro 3 serait représenté par le terme suc(suc(suc(0))). L’expression(8−4)∗3 pourrait être représentée par le terme mult(moins(8,4),3). un terme composé est essentiellement récursif, puisqu’il contient des arguments qui sont eux-même des termes. Notons qu’une variable peut apparaître dans un terme composé. Supposons par exemple que nous utilisons le foncteur pere_de pour représenter le père d’une personne. Ainsi, le terme pere_de(maria) représente le père de Maria. Rien n’empêche d’écrire le terme pere_de(X), qui désigne une entité qui est le père de quelqu’un.