Cours2 Prolog1
Cours2 Prolog1
Cours2 Prolog1
Fonctionnement
Utilisation pour des bases de connaissances
Listes
PROGRAMMATION LOGIQUE
¢ Origines :
1970, Marseille, Colmerauer
Edimbourg, Warren
¢ Bibliographie
¢ Programmation déclarative :
L’utilisateur définit une base de connaissances
L’interpréteur Prolog utilise cette base de
connaissances pour répondre à des questions
¢ Constantes
Nombres : 12, 3.5
Atomes
¢ Chaînes de caractères commençant par une minuscule
¢ Chaînes de caractères entre " "
¢ Liste vide []
¢ Variables
¢ Chaînes de caractères commençant par une majuscule
¢ Chaînes de caractères commençant par _
¢ La variable « indéterminée » : _
¢ Programme P
P1 : pere(charlie, david).
P2 : pere(henri, charlie).
P3 : papy(X,Y) :- pere(X,Z), pere(Z,Y).
¢ Appel du programme P
A: papy(X,Y).
¢ Réponse : X=henri, Y=david
X|X1
Y|Y1
P1 : pere(charlie, david)
david|Y
¬pere(david, Y)
échec : retour arrière succès de la réfutation
7
papy(X,Y)
P3
et
pere(X,Z) pere(Z,Y)
ou pere(david,Y) pere(charlie,Y)
P1 P2
ou ou
P1 P2 P1 P2
X=charlie X=henri
Z=david Z=charlie
échec échec Y=david
succès
8
10
12
13
¢ Hypothèse
secretaire_dit_vrai.
¢ Pour la démonstration, on pose la requête :
ingenieur_ment.
15
16
¢ Exemple : factorielle
factorielle(1) = 1 (Cas d’arrêt)
factorielle(n) = n * factorielle(n-1) si n≠1
Appel récursif
17
¢ Il faut :
Choisir sur quoi faire l’appel récursif
Choisir comment passer du résultat de l’appel récursif
au résultat que l’on cherche
Choisir le(s) cas d’arrêt
18
20
21
Il faut faire des cas exclusifs
Licence Lyon1 - UE LIFprolog N. Guin
UN EXEMPLE : FACTORIELLE (2)
fact(1, 1).
fact(N, R) :- ?- 5 is X-1.
fact(Nm1, Rnm1), ERROR: Arguments
are not
Nm1 is N-1, sufficiently
R is Rnm1*N. instantiated
% Execution
Aborted
?- fact(3,R).
?- plus(3,2,5).
ERROR: Arguments are not
sufficiently instantiated true.
^ Exception: (9) 1 is ?- plus(X,2,5).
_G241-1 ? creep X = 3
Exception: (8) true.
fact(_G241, _G255) ? creep
Exception: (7) fact(3,
_G195) ? creep
% Execution Aborted
22
23
25
?- a=\=b. ?- a\==b.
ERROR true.
?- A==3. ?- A=3.
false. A = 3.
?- p(A)\==p(1). ?- p(A)\=p(1).
true. false.
26
¢ Liste vide : [ ]
27
28
?- somme([1,2,3,5],N).
N = 11
29
30
[ieme].
Warning: (/Users/nath/Enseignement/Option Prolog/ieme:2):
Singleton variables: [L]
Warning: (/Users/nath/Enseignement/Option Prolog/ieme:3):
Singleton variables: [X]
% ieme compiled 0.01 sec, 736 bytes
true. 31
?- ieme([a,b,c,d],2,N).
N=b;
false.
32
34
35
36