0% ont trouvé ce document utile (0 vote)
125 vues2 pages

TP Numéro 1: 1 Utilisation de Swi-Prolog Sous Unix

Ce document décrit un TP sur Prolog contenant des exercices sur les arbres généalogiques, la traduction d'énoncés en Prolog, l'unification, et des opérations sur les listes comme le calcul de la longueur, la concaténation, le test de palindromes, et le filtrage selon un critère.

Transféré par

Moulai
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
125 vues2 pages

TP Numéro 1: 1 Utilisation de Swi-Prolog Sous Unix

Ce document décrit un TP sur Prolog contenant des exercices sur les arbres généalogiques, la traduction d'énoncés en Prolog, l'unification, et des opérations sur les listes comme le calcul de la longueur, la concaténation, le test de palindromes, et le filtrage selon un critère.

Transféré par

Moulai
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 2

Université Lyon1 – Licence Sciences et Technologies UE LIFO42 - Prolog

TP numéro 1

1 Utilisation de Swi-Prolog sous Unix


Choisissez votre éditeur préféré pour créer un fichier avec une extension .pl dans lequel vous
écrirez votre programme (par exemple tp1.pl). Attention à ne pas utiliser de majuscule pour la
première lettre du nom du fichier.
Placez-vous dans le répertoire où figure votre fichier puis lancez Prolog grâce à la commande
prolog ou swipl ou pl. Chargez votre programme grâce à l’instruction [tp1]. À chaque modification
du programme, n’oubliez pas d’enregistrer et de recharger le fichier dans Prolog.

2 Arbre généalogique
2.1 Déclarations
Définissez la famille ci-dessous dans l’éditeur. Attention à ne pas mettre de majuscules aux
prénoms ni aux prédicats. N’oubliez pas les points.
homme(albert). pere(albert,jean).
homme(jean). pere(jean,paul).
homme(paul). pere(paul,bertrand).
homme(bertrand). pere(paul,sophie).
homme(dominique). pere(jean,simone).
homme(benoit). pere(louis,benoit).
femme(germaine). mere(germaine,jean).
femme(christiane). mere(christiane,simone).
femme(simone). mere(christiane,paul).
femme(marie). mere(simone,benoit).
femme(sophie). mere(marie,bertrand).
mere(marie,sophie).
2.2 Questions
Traduire les questions suivantes en Prolog et vérifier les réponses :
Est-ce que Paul est un homme ? Est-ce que Marie est la mère de Sophie ? de
Est-ce que Benoit est une femme ? Benoit ?

Qui est une femme ? Qui est la mère de Jean ?

Qui est un homme ? Quels sont les enfants de Paul ?


Quels sont les hommes qui sont pères ?
Université Lyon1 – Licence Sciences et Technologies UE LIFO42 - Prolog

2.3 Définition de prédicats


Définir les prédicats suivants :
• parent(X,Y) : X est un parent de Y, pere ou • grand_pere(X,Y) : X est le grand-père de Y ;
mere ; • grand_mere(X,Y) : X est la grand-mère de Y ;
• fils(X,Y) : X est le fils de Y ; • frere(X,Y) : X est le frère de Y ;
• fille(X,Y) : X est la fille de Y ; • sœur(X,Y) : X est la sœur de Y.

3 Traduction d’énoncés
Traduire en Prolog l'énoncé suivant :
Marie aime le vin
Pierre est un voleur
Pierre aime tous ceux qui aiment le vin
Si quelqu'un est un voleur et aime quelque chose alors il le vole
Qui vole quoi ?

4 Unification
Que donnent les unifications suivantes :
pierre=marie. X=parent(Y,paul).
X=jean. [X,Y]=[a,b,c].
X=Y. [X,Y|L]=[a,b,c].
pierre=aime(X,Y). [X|L]=[X,Y|L2].
pere(X,Y)=aime(T,jean). pere(X,fille(X))=pere(jean,Y).

5 Exercices sur les listes


• Définir le prédicat longueur(L,N), qui étant donnée la liste L calcule sa longueur N.
• Définir le prédicat concat(L1,L2,L3) où L3 est le résultat de la concaténation de L1 et L2 (sans
utiliser append).
• Définir le prédicat palindrome(L) vrai si la liste L est sa propre image renversée.
• Définir un prédicat rang_pair(X,Y) qui extrait les éléments de la liste X qui ont des indices de
rang pair afin de construire la liste Y. Ex. rang_pair([a,b,c,d,e],L). -> L=[b,d]
• Définir le prédicat indice(X,L,N), qui étant donnés un élément X et une liste L, X appartenant à L,
calcule N l’indice de la première occurrence de X dans L. Peut-on utiliser ce prédicat pour formuler
une requête permettant de calculer le ième élément d’une liste ?
• Écrire le prédicat remplace(X1,X2,L1,L2) qui construit la liste L2 qui est la liste L1 dans laquelle
X1 est remplacé par X2.
n
• Écrire le prédicat somme(L,R) qui si L = (x1, x2, . . . , xn) calcule R = ∑ ix i
i=1

• Définir le prédicat partage(L,X,L1,L2), qui étant donnés une liste de nombre L et un nombre X,
calcule la liste L1 des nombres de L inférieurs à X, et la liste L2 des nombres de L supérieurs ou
égaux à X. €

Vous aimerez peut-être aussi