# $%%%
& &
"' '(
) )
*
)
*
+
)
,
)
-. !/
*
+" (
012 -
)
&
*
) 3
)
0.
"' ') 4 *
.!
5
. 6 * 7
(
,
"' ')
7
)
8
,
99
.
6
)
7
8
,
)
*
)
. !
)
:
&+
)
-
* 7
7 !
&7
,
&.
"' '*
;
)
& &
/ ,*
)
) .
*
;
)
& &
* &
*
) )
8 (
5
*
/ (< 7
*
)
.
/8
*
/
)
7 *
/ 99)
7 *
( )
,* )
7
,*
9
7
3&
.
pere(alain, jeanne). pere(alain, michel). pere(michel, robert). mere(sylvie, robert). mere(sylvie, luc). pere(georges, sylvie). :- pere(alain, jeanne)" *
=
:- pere(alain, robert) :- pere(alain, X) X = michel X = jeanne:- mere(X, robert) X = sylvie
:- mere(X, michel)
:- pere(michel, X), mere(sylvie, X) X = robert :- pere(alain, X), pere(X, robert) X = michel :- grand_pere(alain, robert)
7 *
9
$=
!
"
!
#
"$ # %
#
&
!
&
&
"7
7
&
+) )
*
)
*
- =
∃>
+
*3 +?7>-
∧
+
*3 +>7@-
∨
3 +>7@-
-
-
&
*3
+?7@-/
*
)
=
∀>
+
+
*3 +?7>-
∧ *3 +>7@-
&
*3 +?7@-
-∧
+
*3 +?7>-
∧
3 +>7@-
-
&
*3 +?7@-
-
-0 ) , ) 7 & 7 ) ) * 9 7 ) / / A * 7 / * 9) / 9) $ / & 9 / ) 99$
# $%%%!
3 9
)
"' ' 7
)
9)
* )
(
=
grand_pere(X,Y) :- pere(X,Z), pere(Z,Y). grand_pere(X,Y) :- pere(X,Z), mere(Z,Y).
' *
&
grand_pere=
:- grand_pere(alain, robert)
:- grand_pere(alain, X) X = robert
:- grand_pere(X, robert) X = alain
X = georges
:- grand_pere(X,Y) X = alain Y = robert
X = georges Y = robert X = georges Y = luc
# )
=
grand_pere(X,Y)
B
0. *
+?7>-7 *
+>7@-0.0.
?C
7 >C<
7 *
+<
7@- B ) )
0.$.
*
+
) 7@- B
7
0.D.
?C ) 7 >C ( 7 *
+ ( 7@- B ) )
0.E.
?C&
& 7 >C 8
7 *
+ 8
7@- B ) )
$. *
+?7>-7
+>7@-$.0.
?C
7 >C<
7
+<
7@- B ) )
$.$.
?C
7 >C ) 7
+
) 7@- B ) )
$.D.
?C ) 7 >C ( 7
+ ( 7@- B ) )
$.E.
!"
+ 8
7@- B
7
#
$ % $ %& %'
&
)
) )3
)
4
*
) 7
( .
=
a, sylvie, 2000"
)
) )3
)
4
*
< )
F.
=
X, A, _a, Sylvie, _)
7
( 7
8 (
9 )
**
5
.
=
X, a, f(a), a+3, 3+4(
8 (
*
) +
- **
5
+*
;
-7
,*
* *
*
;
.
=
p(a), q(X), pere(alain,Y), true=
* 8
(
)
*
)
*
3 .
# "' '
0,)
*
/
*
9+9)
9-7 *
8 (
= 7 *
,
& 9
*
*
&
7
*
*
.
=
grand_pere(X,Y) :- pere(X,Z), pere(Z,Y).:- pere(alain,Z), pere(Z,Y).
+)
&
-:- pere(alain,Y).
+)
&
-/
*
9
/
*
.
=
pere(alain, jeanne).+)
*
D
# $%%%)
p :- n1, n2, G 7 np.+
*.
:- n1, n2, G 7 np.-*
9
&
n1∧
n2∧...
∧
np p+
*.
H +
n1∧
n2∧...
∧
np)) ouH
n1∨
H
n2∨...
∨
H
np∨
p+
*.
H
n1∨
H
n2∨...
∨
H
np) p)
)
7
n1, n2, G 7np*# #
)
+ *#
,
#
(
)
8
;
;
+
*
9-.
,
, ,
( #
*#
,
#
)
&
+)/
5
*
9-=
b1,
b2,
...
,
bp.
+
"' '(
&
.
'
%- %
% .
%
% %
/
*
*
*
(
b17
/
7 )/
5
/
9
b1)
;
)
.
/
7
)
)
5
)
7
)
*
/
9)
7
7
/
7 ) )
,
)
I*
* )
(
.
)
/ ) )7
8
)
, 99) .
J
7
*
7
;
)
) 7
*
K
L +"
!
-7
7
*
I
K
L. +6
)
"' ' 78
.-/
/8 *
,5
*
)
,5
.
%/
+ 0
=
grand_pere(X,Y) :- pere(X,Z) , pere(Z,X) . grand_pere(X,Y) :- pere(X,Z) , mere(Z,X) . pere(jean, pierre) . pere(jean, simon) . pere(pierre, jacques) . pere(jules, robert) . pere(jules, jeanne) . mere(jeanne, pierre) . mere(jeanne, simon) . mere(pierrette, jacques) . mere(pierrette, alain) . mere(julie, robert) . mere(julie, anne) .
=
:- grand_pere(GP,PE),write(GP),write(' est le grand-père de '),write(PE),nl.
*
(
grand_pere(GP,PE)
9
) *
*
3 )
7
* ) *
(
pere(GP, Z) , pere(Z, PE)
*
3
)
(
GP
→
jeanI
Z→
pierreE
# $%%% pere(pierre,PE) PE→
jacques,3
(
write(GP) write(jean))
)
jean.
3
(
write(' est le grand-père de ')
)
)
) )3
&
.
3
(
write(jacques))
jacques.
9 7
nl9
5
& .
/
*
) )
jean est le grand-père de jacques.
/
+IK
L-7 /
*
"' ' 99)
3 7
pere(GP, Z) , pere(Z, PE)
))
GP Z PE___________________
jean simon échec pierre jacques échec jules robert échec jeanne échec
7
pere(GP, Z) , mere(Z, PE)
GP Z PE
____________________ jean pierre échec
simon échec pierre jacques échec jules robert échec jeanne pierre
simon
9
)
* 7 /
*
)
jean est le grand-père de jacques jules est le grand-père de pierre jules est le grand-père de simon
121
% % &3
*
pl/ K
L
)
&
)
+
&
-7 5 *
/
9)
9 *
)
:- consult(nom_du_fichier) . :- [nom_du_fichier] ./
)
)
7
*
:- consult(user). :- [user].*
)
7 *
K! " L 6.
'
*
*
)
&
)
&
5 *
/
9)
.
*
<
*
)
5
)
7
*
&
9)
)
q(_) :-M
N.
*
,
*
# $%%%
q(_) :- grand_pere(GP,PE),
write(GP),write(' est le grand-père de '),write(PE), nl.
5
)
q(_). q(X)..
*
)
*
)
;
p7
*
listing(p).)
7
*
listing., )
)
7
*
sh.*
, )
/
*
)
7 *
"' ' 7
*
K! " L 6
' *
)
)
=
)
O
&
)
7
)
)
/* *P.7
*
halt.+
*
(
*
.-2
%
1 1
'2&
%
1
"' '*
;
, * ) =
'
*
/ (
*
/
94
)
*
) )
7
*
)
* &
7 / A
&
6
"7
*
(
/
/ 99) ) .
6
/ * )
)
97
)
p :- q , r .*
)
'
'
6
/ * ) * )
7
;
)
*
)
(
'
) $
(
'
)
#*
*
$
*
+
'
9
/
(
)
.
6 * 7 /
*
)
97 /
)
/ *
/
*
) .
7
/
*
* )
7 /
*
)
)
*3
7
/
A
7 )
)
/
*
) .
%/
+ =
* &
/
,
ancetre(X, Z) :- parent(X, Z) .ancetre(X, Z) :- parent(X, Y) , ancetre(Y, Z) . parent(michel, bernard) . parent(thomas, bernard) . parent(thomas, lise) . parent(bernard, anne) . parent(bernard, pierre) . parent(pierre, jean) .
ancetre2(X, Z) :- parent(X, Y) , ancetre2(Y, Z) . ancetre2(X, Z) :- parent(X, Z) .
ancetre3(X, Z) :- parent(X, Z) .
2
# $%%%ancetre4(X, Z) :- ancetre4(X, Y) , parent(Y, Z) . ancetre4(X, Z) :- parent(X, Z) .
( #
, ,44(
'
*
)
*
,
) * &
560
7
+
86
0. * + 7 * - I ) ) $. * + 7 @ - 7 ) + @7 * -$.0. @ C( I( C ) +( 7 * - . $.0.0. * +( 7 * - I # 9 * / ; ) $.0.$. * +( 7@/- 7 ) +@/7 * -$.0.$.0 @/ C I( C ) + 7 * -$.0.$.0.0. * + 7* - I ) ) $.0.$.0.$. * + 7 @Q- 7 ) +@Q7 * -) -) $.0.$.$. @/ C* I ) +* 7 * -$.0.$.$.0. * +* 7 * - I ) ) $.0.$.$.$. * +* 7 @Q- 7 ) +@Q7 * -@Q C< I( C ) +< 7 * -$.0.$.$.$.0. * +< 7 * - I ) ) $.0.$.$.$.$. * +< 7 @Q/- 7 ) +@Q/7 * -) -) $.$. @ C I( C ) + 7 * -$.$.0. * + 7 * - I ) ) $.$.$. * + 7 @/- 7 ) +@/7 * -) -)*
7 * 7
)
7
)
) 7
7
*
& .
:60
:7
+
86
0. * + 7 @- 7 ) +@7 * -0.0. @ C( I( C ) $+( 7* -0.0.0. * +( 7 @/- 7 ) $+@/7 * -0.0.0.0. @/ C I( C ) $+ 7 * -0.0.0.0.0. * + 7 @Q- 7 ) $+@Q7 * -) -) 0.0.0.0.$. * + 7 * - I ) ) 0.0.0.$. @/ C* I( C ) $+* 7 * -0.0.0.$.0. * +* 7 @Q- 7 ) $+@Q7 * -@Q C < I( C ) $+< 7 * -0.0.0.$.0.0.* +< 7 @Q/-7 ) $+@Q/7 * -I ) ) 0.0.0.$.0.$. * +< 7 * - I ) ) 0.0.0.$.$. * +* 7 * - I ) ) 0.0.$. * +( 7 * - I/ # / * / ; ) 0.$. @ C I( C ) $+ 7* -0.$.0. * + 7 @/- 7 ) $+@/7 * - I ) ) 0.$.$. * + 7 * - I ) ) $. * + 7 * - I ) )7
)
)
R
& .
S
# $%%%;60
;7
+
86
0. * + 7 * - I ) ) $. ) D+ 7 @- 7 * +@7 * -$.0. * + 7 @/-7 * +@/7 * -$.0.0 @/ C( I( C * +( 7 * - I/ # / * / ; ) $.0.$ @/ C I( C* + 7 * - I ) ) $.$. ) D+ 7 @Q- 7 * +@Q7 @/-7 * +@/7 * -$.$.0. * + 7 @Q- 7 * +@Q7 @/-7 * +@/7 * -$.$.0.0.@Q C( I( C* +( 7@/- 7 * +@/7* -$.$.0.0.0. @/ C I( C * + 7 * - I ) ) $.$.0.0.$. @/ C* I( C * +* 7 * - I ) ) $.$.0.$. @Q C I( C * + 7 @/-7 * +@/7 * -) -) $.$.$. ) D+ 7@Q/-7* +@Q/7@Q-7* +@Q7@/-7* +@/7* -$.$.$.0. * + 7 @Q/- 7 * +@Q/7 @Q- 7 * +@Q7 @/- 7 * +@/7 * -)... +( ) 9 - ... $.$.$.$. ) D+ 7@QQ-7 * +@QQ7 @Q/-7 * +@Q/7 @Q- 7 * +@Q7 @/-7 * +@/7 * -)... +( ) 9 - ...7
7
)
7
8
( ) & .
* &
/
;
* .
<60
<7
+
86
0. ) E+ 7 @- 7 * +@7 * -0.0. ) E+ 7 @/- 7 * +@/7 @- 7 * +@7 * -0.0.0. ) E+ 7@Q- 7* +@Q7@/- 7* +@/7@- 7 * +@7* -0.0.0.0 )... ... +( ) 9 - ...)7
)
*
7
;
*
.
#
*
7
* &
.
9
;
9 )
.
*
9
*
;
.
*
/
)
7
/
,
)
.
*
* )
7
ancetre ancetre2)
) .
/
;
.
/
)
)
/
7
ancetre7 )
*
*
.
,
( )
7
ancetre3*3
7
ancetre4;
/
T
)
*
) * &
*
/ ,*
*
=
,
8
/ (
)
* =
parent* U
ancetre.
)
*
5
parent7 5
9
*
)
7
*
,.
*
)
*
5
ancetre,) .
)
* &
"' ' 7)
/ (
/
3
)
*
) ) *
.
7 *
/ , )
7
)
)
5
99) ) 7
*
/
)
,7
*
/
) * .
V
# $%%%2
&1
% 1
%
*
(
/
*;)
3
8
/
*
) *
9
+
-7
Q
!Q.
) *
)
p :- n1, n2, G7
!7
G , np.)
,
*
/ **
5
;
)
<
/5 / , )
!**
.
) * *
5
/ ,*
)
(
)
5
/ 99) )
/
* &
.
56%/
+
f9
*
f(x)= 0 si x<3 2 3≤x<6 4 x≤6'
9
*
)
*+,7 8-
⇔
8C9+,-*
/
(
)
=
p(X,0) :- X<3 . p(X,2) :- X>=3 , X<6 . p(X,4) :- X>=6 .+
=
*
3
/
< >=;
)
7
8
)
).-!
(
)
)
9
5
9
f. ' *
)
&
/
)
.
#
=
"
:- p(5,Y).0.
MD I ) )
$. DCM 7 M2 I # 9 I
) @ C:
D. 2CM I ) )
'
)
,)
9. ' *
) /
;
)
))3. ! )
9
)
) * =
p(X, 0) :- X<3 , ! . p(X, 2) :- X>=3 , X<6 , ! . p(X, 4) :- X>=6 , ! .! * &
)
)
97
5
9
7 5 )
* )
* *
/ ,)
.
/ , )
0.
MD I ) )
$. DCM 7 M2 I # 9 I
) @ C:
'
&
7 *3
9
/
* *
*
D7
9
D
9
& 5 . '
) **
)
=
p(X, 0) :- X<3 , ! . p(X, 2) :- X<6 , ! . p(X, 4) :- ! .! * &
/
*
)
9.
)
& /
)
7
) )
*
;
9 )
. 6 * 7
) *
*
( 7
*
9 )
7
p(5,Y) Y = 2*
Y = 41
# $%%%:61#
/
+ 0
/ # , , #/
,+?7 @7 >-
⇔
>
,
?
@
* &
)
9=
max(X, Y, X) :- Y=<X . max(X, Y, Y) :- X<Y .!
)
*
99) ) 7
)
9=
max(X, Y, X) :- Y=<X , ! . max(X, Y, Y) .;6
#+
*#
/
(
)
)
9=
*=
7 (.
/
)
99
*
9
*= ).
*⇔ +
∧ (-
∨
)
(
)
9. /
*
*=
7 T7 (.
*
9
*= ).
*⇔ +
∧ (-
∨
+H
∧
)-*= ).
*
9
*=
7 T7 (.
*
⇔
)
∨
+
∧
(-2
& %&
1 % 1
56
'
*
7 )
*
(
5 )
7
[a,b,c,d] .(a,.(b,.(c,.(d,[])))) [a[b,c,d]]. []7
[b,c,d] [a,b,c,d].
/
9)
[a,b,c,d] [aL] L = [b,c,d].
:6
(
' *
9
) )
,
*
* &
=
concatenation([],L,L) . concatenation([X, L1],L2,[X, L3]) :- concatenation(L1,L2,L3) :- concatenation([a,b,c], [d,e], R) . R = [a,b,c,d,e]'
99 =
0.
) )
$. ? C 7 0 CK(7)LI $ CK7 LI( C) )
+K(7)L7 K7 L7
D-$.0.
) )
$.$. ?/ C(I 0/CK)LI D CK(
D/LI( C) )
+K)L7 K7 L7
D/-$.$.0.
) )
DQ-0%
# $%%%$.$.$.0.
DQ CK7 LI # 9
) D/ CK)7 7 L
D CK(7)7 7 L
" CK7(7)7 7 L
' *
**
)
9 )
) )
7
)
)
)
.
:- concatenation(P, Q, [a,b,c,d]). P = [] Q = [a,b,c,d] P = [a] Q = [b.c.d] P = [a.b] Q = [c.d] P = [a.b.c] Q = [d] P = [a,b,c,d] Q = []99 7
0.
=> $
=
,>? # 9 I
$. ? C I CK
∧
0LI D CK(7)7 LI( C) )
+ 07J7K(7)7 L-I
$.0. 0 CKLI$
=
,> # 9
=>
$.$. ?/ C(I 0 CK(
∧
0/LI D CK)7 LI( C) )
+ 0/7 J7 K)7
L-$.$.0. 0/ CKLI$
= ,> # 9
= >
$.$.$. ?Q C)I 0/ CK)
,
0QLI DQ CKLI( C) )
+ 0Q7 J7
KL-$.$.$.0. 0Q CKLI$
=,> # 9
=
>
$.$.$.$. ?Q/C I 0QCK
∧
0Q/LI DQ/CKLI( C) )
+
0Q/7J7KLL-$.$.$.$.0. 0Q/ CKLI$
=> # 9
=
,>
$.$.$.$.$. ) )
2
% @%
% 1
1
% @%
fail*
)
*
9
*
-
+*
)
.
-.
*
/ ,*
*
)
Q
,
9
) & Q=
aime(marie,X) :- escargot(X) , ! , fail . aime(marie,X) :- animal(X) .
/
*
) *
*
( .
7
not\+
*
) *
9 7
9 )
=
not P :- P , ! , fail . not P .' *
,*
*
* )
* =
aime(marie,X) :- animal(X) , not escargot(X) .
' *
9
*
)
different,*
X Y*
*
/
9 =
different(X,X) :- ! , fail . different(X,Y) .
different(X,Y) :- not X=Y .
different(X,Y) :- X=Y,!,fail ; true .
)/
5
different(X,Y):- X=Y, ! , fail. different(X,Y) .
00
# $%%%1
not p(X)*
Q*+?- 9 ,Q
Q
)
*+?-Q.
,* *
)
/
.
=
/
(
)
=
r(a) . q(b) . p(X) :- not r(X) . :- q(X) , p(X). X = b :- p(X) , q(X).)
.
99 7
*
) 7
q(X) X = b.
9
p(b)7
not r(b).*
3 )
9
not=
r(b) ...) ).
,3
)
.
6
,3
) 7
/ (
p(X) not r(X).*
3 )
9
not=
r(X) , ! , fail . r(X) X = aI
)
fail)
.
7 )
9 7
/8
*
3 5 )
!7
/
7
,3
)
9
not/
*
8 .
2
%
1 &1
@- %
$ %&
1+2*
+(1,2)9, 7 *
(
:
&7
(
3.
*
)
7
*
/
9
)
3.
,*
7
*
*
)
* ) ,.
,*
)
/
*
*
9
.
7
X is 1+2 X=3.&
7
X is Y Y9
)
X.
Y.
6
)
*
7
X Y.
X =:= Y X Y&
.
* ) 9
)
X = Y9
X Y7
)
X == Y X Y)
*
.
X =\= Y X Y99
.
X < Y [
*
. X >Y, X =<Y, X >=Y] X <K *.
>7
≤7 ≥L Y.
-
'
1
%
1- - %&
*
( 7 5 /
/
* &
7
)
)
7 /
<
7
0$
# $%%% assert(C)<
)
!.
*
)
*
/
*
.
asserta(C)<
!
-
7 )/
5
*
3 )
*
)
*
.
assertz(C)<
!
* 7 )/
5
*3
3 )
*
)
*
.
clause(P,Q))
)
)
;
) * J. +J C
*
)
*
-.
retract(C)**
*
3 )
/
9
)!.
abolish(N, A)**
)
/
.
"
8
,
=
/ ) *
.
9
)
7
assert(p(a));*
*
7
)
assert((p:-q,r)) assert(p:-q,r) .%/
+ ,.
#
0 #
, '
* &
)
9
9
=
fibo(0,0) . fibo(1,1) . fibo(N,F) :- N>1 , N1 is N-1, fibo(N1,F1) , N2 is N-2, fibo(N2,F2) , F is F1+F2 ."
=
)
fibo(N,F1+F2) :- N>1 , fibo(N-1,F1), fibo(N-2,F2)
)
) )
N-1*
*
/
9
)
7
)
99
) .
! * &
)
* &
)
9
*
) )
( )
*
9 .
) 7
"' ' )
5 )
* &
7
)
97
) )
<
)
)
*
7
fibo(0,0) :- ! . fibo(1,1) :- ! . fibo(N,F) :- N1 is N-1, fibo(N1, F1) , N2 is N-2, fibo(N2, F2) , F is F1+F2 , asserta((fibo(N, F) :- !)) .7
:- fibo(4,Y) .@ *
D7 *3
)
fibo(4,3) :- ! . fibo(3,2) :- ! . fibo(2,1) :- ! .<
.
)
/
) )
,9 .
) * 7
*
( 7
;
)
)
.
N>1
.
6 * 7
:- fibo(6,Y) .*
2
) )
7
<
*
)
.
0D
# $%%%%
%%& &
%&
see(Fic) :
)
9)
Fic ; seeing(Fic) :/
)
Fic; seen :9
/
)
I
tell(Fic) :9)
Fic ; telling(Fic) :)
Fic; told :9
)
I
# %
#
read(X) :)
/
)
/
+
;
/
*
7 /
(
)
/
K
L-
9
)
X write(X) :)
X)
nl :*
& 5
&
tab(N) : N* )
get0(N) : N)
!
) )3
)
9
9)
7
K! " L >
9)
9
get(N) :;
)
*
*
) )3
(
)
put(N) :)
) )3
)
$ % $ %&1
%&
%
1 &
% %'
&
;
,*
< )
.
P :- A , (B;C) , D.(
*
P :- A , B , D. P :- A , C , D.=
8
(
)
*
3
P :- (A;B), C. P→
Q ; R .& 9
/
9 *
P→
Q;R :- P,!,Q. P→
Q;R :- R .repeat
*
&
( )
99) )
.
9 *
repeat.repeat :- repeat.
X =.. Y X
/
9
)
9
9+?07 G ? -
Y)K97?07 G7 ? L
call(X)