Vous êtes sur la page 1sur 28

12-Dec-11

Content Starter Set

Programmation logique

Programmation logique

Objectifs de ce module
En suivant ce module vous allez:
Aborder la programmation logique, dclarative.

Comprendre les mcanismes fondamentaux de Prolog.

Tester des programmes avancs crits en SWI-PROLOG.

Programmation logique

Plan du module
Voici les parties que nous allons aborder:

Elments de base

Spcificits et mcanismes fondamentaux

Rcursivit et listes

Applications

12-Dec-11

Content Starter Set

Elments de base

Plan de la partie
Voici les chapitres que nous allons aborder:
Gnralits Structure du programme Les termes Larithmtique Les entrs/sorties Utilisation de SWI Prolog

Elments de base

Gnralits PROLOG (PROgrammation en LOGique) Langage dclaratif fond sur la logique du premier ordre (calcul des prdicats)
- Alain Colmerauer Marseille -1972. - W.F.Clocksin and C.S.Mellish: programming in Prolog 1981

Elments de base

Gnralits

Outil de base en intelligence artificielle grce :

- sa puissance dductive - lutilisation des variables - au mcanisme de la remonte qui permet de chercher toutes les solutions existantes.

12-Dec-11

Content Starter Set

Elments de base

Gnralits
Ses applications pratiques sont nombreuses. Il peut :

contrler des processus industriels, traduire un langage en un autre, construire des systmes expert, dmontrer des thormes, etc

Elments de base

Structure du programme

Un programme est constitu de clauses: FAITS et REGLES qui sont dclars dans la BASE DE DONNEES (ou base de connaissances)

Elments de base

Structure du programme
LES FAITS Un fait est une vrit non conditionne.

Exemples : blanche (maison). --> (la maison est blanche) aime (jean, prolog). --> (Jean aime le prolog) voiture (ford, rouge, 3, 5.000). --> (la voiture est une ford rouge de trois ans et cote 5.000 euros)

12-Dec-11

Content Starter Set

Elments de base

Structure du programme
LES REGLES Une rgle est une vrit conditionne. Rgle une seule condition : La rgle est forme d'une tte (la conclusion) et d'un corps (la condition). La conclusion est prouve si la condition est vraie. Exemple :

achte(jean, voiture) if gagne(jean, loterie).

Elments de base

Structure du programme
Rgles plusieurs conditions Les conditions sont lies par la conjonction and : relation (objet, objet) if relation (objet, objet) and relation (objet, objet) and relation (objet, objet).

Exemple :

grand-pre(jean, yves) :pre(jean, paul) and pre(paul, yves).

Elments de base

Structure du programme

La conclusion est prouve si toutes les conditions sont vraies.

Pour prouver une condition on cherche lunifier* - soit avec un fait de la base de donnes - soit avec une tte de rgle (chanage arrire)**

12-Dec-11

Content Starter Set

Elments de base

Structure du programme
Plusieurs rgles ayant la mme conclusion (paquet de clauses). Exemple: achte(jean, voiture) :- hrite(jean, fortune). achte(jean, voiture) :- gagne(jean, loterie).

Cela peut scrire aussi: achte(jean voiture) :- hrite(jean, fortune) OU gagne(jean, loterie).

Elments de base

Structure du programme
Ensemble de clauses qui ont la mme conclusion (la mme tte de clause) : a (X) : - b (X,Y). a (X) : - c (X), e (X). a (X) : - f (X,S).

Cela peut scrire aussi: a (X) :- b (X,Y ); c (X) , e (X) ; f (X,S).

Elments de base

Structure du programme
Paquet de clauses (suite) Les clauses ayant la mme tte sont lies par or Les conditions d'une clause sont lies par and Chaque clause est une solution du problme. L'ordre des clauses est sans importance. Prolog les traite une une dans l'ordre d'criture. Si une seule est vraie --> VRAI Si toutes sont fausses --> FAUX

12-Dec-11

Content Starter Set

Elments de base

Structure du programme
Conventions d'criture. La programmation en Prolog implique les normes suivantes :

Les clauses de mme prdicat sont groupes ensemble Les clauses sont parcourues de haut en bas Toute clause (fait ou rgle) se termine par un point Dans lcriture courante on prfre les notations: or ; and , if :-

Elments de base

Les termes
Prolog comprend quatre types de termes:

- les atomes - les nombres - les variables - les termes complexes

Elments de base

Les termes
Reprsentation arborescente des termes: termes
termes simples termes complexes

variables

constantes

atomes

nombres

12-Dec-11

Content Starter Set

Elments de base

Les termes
Les caractres qui composent les termes sont:

- les majuscules: - les minuscules: - les digits:

A, B, ..., Z; a, b, ..., z; 1, 2, ..., 9;

- les caractres spciaux: +, -, *, /, <, >, =, :, ., &, ~, _.

Elments de base

Les termes
Les atomes : suite continue de caractres qui commencent par une minuscule (pas de blancs) suite de caractres entre apostrophes (si les symboles contiennent des blancs ou des majuscules au dbut). suite de caractres spciaux
lve ticket_de_mtro datomes Exemples ticket de mtro Jean est sportif @+:>:-

Elments de base

Les termes
Les nombres Entiers (tout nombre entier) Flottants (les nombres dcimaux)

Ce sont surtout les entiers qui vont tre utiliss par la suite.

12-Dec-11

Content Starter Set

Elments de base

Les termes
Les variables: Suite de caractres commenant par - une majuscule - par un tiret-bas (underscore)

Exemples: X, _4156, Jean, MoDem, _jean,

Elments de base

Les termes
Les termes complexes (structures) se composent: - dun foncteur (le prdicat en logique) - dun ou plusieurs arguments - le nombre darguments = arit

Exemple: aime(jean, prolog) aime= foncteur ; jean, prolog = arguments

Elments de base

Les termes
Termes complexes (imbriqus): Exemple: possde(X, comptebancaire(5000)). possde = foncteur deux arguments: - la variable X - le terme complexe comptebancaire(5000) comptebancaire = foncteur un argument

12-Dec-11

Content Starter Set

Elments de base

Les termes
Prdicats de comparaison de termes: == et \== Exemples: ?- a == a. ?- a == b. ?- a \== b. ?- 5 == 5. Yes No Yes Yes No Yes
%nvalue pas ses arguments

?- 3+2 == 4+1. ?- f(a, b) == f(a, b).

Elments de base

Larithmtique
En Prolog les symboles: +, -, *, /, mod

ne permettent pas deffectuer des calculs. Ce sont des foncteurs avec des arguments. Ex:

?- X = +(3, 5).

% ou bien X = 3 + 5. (plus habituel)

Rponse: X = 3 + 5 La variable X a t lie lexpression non value ?- 5+7*3 = X. Rponse: X = 5+7*3

Elments de base

Larithmtique
Pour calculer il faut utiliser loprateur is *

?- X is 3 + 4. ?- X is 5 2. ?- X is 9*2. ?- X is 11/2. ?- X is mod(5,2). ?- 1 is mod(5,2).

X =7 X=3 X = 18 X = 5.5 X=1 yes

12-Dec-11

Content Starter Set

Elments de base

Larithmtique
Prolog connat la priorit des oprations: ?- X is (3 + 5) + 4. ?- X is 3 + 5 * 4. 12 23 12

?- X is (3 + 5) + 4 * (9 - 6) / 3.

On peut utiliser aussi des prdicats: calculer(X, Y) :- Y is (X+2)*(X+1). ?- calculer(3, Y). Y = 20

Elments de base

Larithmtique
Les oprateurs de comparaison dentiers sont:

< <= > >= =:= =\=

infrieur infrieur ou gal suprieur suprieur ou gal (yes si galit) (yes si diffrents)

Elments de base

Larithmtique
Exemple de comparaisons: ?- 3+2 < 9. ?- 2+2=:=1+3 ?- 5 =< 5. ?- 2 =\= 9. Yes Yes* Yes Yes No

?- X = 5, X > 12. ?- X > 6.

erreur: arguments non instancis

10

12-Dec-11

Content Starter Set

Elments de base

Larithmtique
Tableau des diffrents prdicats deux arguments = prdicat dunification (unifie ses arguments)

\= ==

choue si lunification ne russit pas

prdicat didentit (compare tous les types de termes mais nvalue pas ses arguments) \== =:= =/= la ngation du prdicat didentit

prdicat dgalit arithmtique (russit si les arguments sont valus des entiers identiques) prdicat dingalit arithmtique

Elments de base

Les entres - sorties


PREDICATS D'ECRITURE

Le prdfini write/1 crit lcran Exemples:

?- X=a, write(X).

a ab a a b b
(un espace blanc) (six espaces blancs) (saut de ligne)

?- write(a), write( ), write(b). ?- write(a), tab(6), write(b). ?- write(a), nl, write(b).

Elments de base

Les entres - sorties


writef( chane, liste darguments) produit une
sortie formate.

Exemples: ?- writef( %w est le pre de %w , [jules, jim]). Affiche: jules est le pre de jim ?- writef('%w\n%w%5c', [tableau,a, b]). Affiche: tableau a b

11

12-Dec-11

Content Starter Set

Elments de base

Les entres - sorties


PREDICATS DE LECTURE : read(Term). Lit le caractre du flux dentre courant et lunifie avec Term . Exemple: question(X,Y):- writef('%w est-il le pre de %w ?\n', [tom, jim]), read(Rponse), writef('%w %w est bien le pre de %w', [Rponse, tom, jim]).

Elments de base

Utilisation de SWI Prolog


Pour installer SWI-Prolog aller : http://www.swi-prolog.org/ Consult( nom fichier). charge le fichier et le compile

Aprs le prompt ?- on peut poser des questions Toutes les questions finissent par un point. Pour obtenir toutes les rponses (suite la remonte), tapez ENTER ou bien ; . Tous les prdicats commencent avec une minuscule.

Ne laissez pas un blanc aprs un prdicat.


Aprs une parenthse, des blancs et des lignes sont admises Fermez autant de parenthses que vous avez ouvertes.

Elments de base

Utilisation de SWI Prolog


?- listing. affiche les clauses du programme ou le contenu de la base de donnes dynamiques ?- listing(nom du prdicat). prdicat affiche les clauses du

?- trace. active la commande pas pas sur le programme qui va tre lanc ?- trace(nom du prdicat). ?- notrace. ?- help. sapplique sur le prdicat

dsactive le trace explications gnrales explications sur le sujet

?- help(sujet).

12

12-Dec-11

Content Starter Set

Elments de base

Pause-rflexion sur cette 1re partie Avez-vous des questions ?

Programmation logique

Spcificits et mcanismes fondamentaux

Spcificits et mcanismes fondamentaux

Plan de la partie
Voici les chapitres que nous allons aborder: Lunification Interrogation de la base de donnes La remonte Les prdfinis FAIL et CUT Paquet de clauses La ngation Bases de donnes dynamiques Le mode TRACE Le prdfini FINDALL

13

12-Dec-11

Content Starter Set

Spcificits et mcanismes fondamentaux

Lunification Lutilisateur pose des QUESTIONS Prolog RAISONNE En cherchant unifier les questions aux donnes de la base de donnes (faits et rgles)

Spcificits et mcanismes fondamentaux

Lunification
Les rgles de lunification: - Une variable libre est unifiable nimporte quel terme - Une constante (atome ou entier) est unifiable ellemme - Deux termes complexes sont unifiables si: - mme foncteur - mme nombre darguments (mme arit) - les arguments correspondants sont unifiables

Spcificits et mcanismes fondamentaux

Lunification
Exemples dunification ami(jean, X) sunifie avec ami(jean, tom) en liant X = tom ami(jean, tom) ne sunifie pas avec ami(tom, jean) ami(jean, X) ne sunifie pas avec ami(X, tom) (la mme variable ne peut pas tre lie deux valeurs diffrentes) f(a(4), plus(3,9)) sunifie avec f(X,Y) et retourne: X = a(4) et Y = plus(3,9) ?- a(b, X) = a(b, c(Y, e)), Y = hello. X = c(hello, e) Y = hello

14

12-Dec-11

Content Starter Set

Spcificits et mcanismes fondamentaux

Lunification
Le prdicat = est utilis pour lunification Cest un prdicat deux arguments: =/2 (arit 2) qui teste si ses deux arguments sunifient. Exemples: ?- =(a, a). ?- a = a. ?- 5 = 5. ?- 5 = 5. Yes Yes Yes No* Yes** (un atome sunifie lui mme) (expression infixe courante)

?- tom = tom.

Spcificits et mcanismes fondamentaux

Lunification
Exemples dunification (suite)

?- X = Y. ?- toto = X.

X=Y X = toto (la variable est instancie) Y = m(g) Z = s(m)

?- f(m(g), Z) = f(Y, s(m)).

(les foncteurs sont gaux et les arguments sunifient)

Spcificits et mcanismes fondamentaux

Interrogation de la BDD
Questions (buts) lmentaires

Structure de la question: mme syntaxe qu'un fait. Prolog cherche unifier la question avec un fait. Rponse : yes: l'unification a lieu (mme prdicat et mmes arguments dans le mme ordre). no : l'unification n'a pas lieu.

15

12-Dec-11

Content Starter Set

Spcificits et mcanismes fondamentaux

Interrogation de la BDD
Unification avec un fait (les faits de la diapo 11): -? aime(jean, prolog). Prolog rpond: yes % jean aime-t-il le prolog?

-? blanche(maison).

-> yes

-? blanche(voiture). -> no

Spcificits et mcanismes fondamentaux

Interrogation de la BDD
Unification avec une tte de rgle:

gagne(jean, loterie). achte(jean, voiture) :- gagne(jean, loterie). -? achte(jean, voiture). yes % la question % la rponse

Spcificits et mcanismes fondamentaux

Interrogation de la BDD
Rgle plusieurs conditions

pre(jean, paul). pre(paul, yves). grand-pre(jean, yves) :pre(jean, paul), pre(paul, yves).

?- grand-pre(jean, yves). yes

16

12-Dec-11

Content Starter Set

Spcificits et mcanismes fondamentaux

Interrogation de la BDD
Questions (buts) multiples

Prolog cherche unifier successivement chacun des buts avec un des faits de la base de faits. Les buts sont traits de gauche droite. La base de faits est explore de haut en bas.

Spcificits et mcanismes fondamentaux

Interrogation de la BDD
Exemple de questions multiples :

clauses: a_crit (hugo, ruy-blas). a_crit (hugo, hernani). questions: ?a_crit(hugo, hernani), a_crit (hugo, ruy-blas).

Chaque but est unifi avec une des clauses Rponse : yes

Spcificits et mcanismes fondamentaux

Interrogation de la BDD
Questions avec des variables

X = variable qui peut prendre diverses valeurs Exemple :


clauses: a_crit (hugo, hernani). a_crit (hugo, ruy-blas). question: ?a_crit (hugo, X). % quest-ce quil a crit V.H?

Rponse: X=hernani

X=ruy-blas

17

12-Dec-11

Content Starter Set

Spcificits et mcanismes fondamentaux

Interrogation de la BDD
Questions multiples et utilisation de variables.

Exemple :

clauses: a_crit (hugo, hernani). a_crit (hugo, ruy-blas). Question: ?a_crit (X, hernani), a_crit (X, ruy-blas).

Quel est lauteur commun de hernani et de ruy-blas ? X = hugo

Spcificits et mcanismes fondamentaux

Interrogation de la BDD
Dtail sur l'unification. Premire tape : Prolog cherche instancier X de la premire question : a_crit (X, hernani) --> il lie X hugo. Deuxime tape : Prolog remonte avec X=hugo et cherche un fait qui s'unifie avec : a_crit (hugo, ruy-blas). il trouve --> affiche : X = hugo

Spcificits et mcanismes fondamentaux

La remonte
Procd de recherche par retour en arrire (backtracking) :
clauses ami (jacques, yves). ami (jean, yves). ami (pierre, luc). ami (pierre, tom). ami (pierre, yves). ami (jean, tom). ami (jean, serge). goal ?- ami (jean, X), ami (pierre, X).

(quels sont les amis communs de Jean et de Pierre ?)

18

12-Dec-11

Content Starter Set

Spcificits et mcanismes fondamentaux

La remonte
X est lie yves (premire instanciation) Prolog cherche : ami (pierre, yves), il trouve et affiche X = yves X est dlie de yves et la recherche recommence : remonte (1) X est lie tom (deuxime instanciation) Prolog cherche : ami (pierre, tom), il trouve et affiche X = tom X est dlie de tom et nouvelle recherche : remonte (2) X est lie serge (troisime instanciation) Prolog cherche : ami,(pierre, serge), ne trouve pas --> STOP

Rponse: X=yves, X=tom.

Spcificits et mcanismes fondamentaux

La remonte

Spcificits et mcanismes fondamentaux

La remonte

19

12-Dec-11

Content Starter Set

Spcificits et mcanismes fondamentaux

Raisonnement PROLOG
Comment raisonne PROLOG :

Afin de rpondre la question pose (satisfaire le but), Prolog raisonne sur les faits et les rgles de la base de donnes.

Il cherche unifier la question (le but) avec un fait ou une tte de rgle (chanage arrire)

Spcificits et mcanismes fondamentaux

Raisonnement PROLOG
Le principe du chanage arrire :

Il cherche la rgle dont la tte est compatible avec le but et cherche prouver les conditions de cette rgle.

Prolog utilise la remonte , savoir, la reprise de la recherche dune solution, chaque fois quun succs ou quun blocage a eu lieu, jusqu puisement des possibilits.

Spcificits et mcanismes fondamentaux

Raisonnement PROLOG
Les buts dune suite sont satisfaits de gauche droite: Si le but est form de plusieurs questions (conjonction de buts), Prolog sattaque au but le plus gauche de la suite, puis il passe au suivant, etc..

Les clauses dun prdicat sont testes de haut en bas: Selon lordre dapparition dans le programme, Prolog cherche un fait de la BDD ayant le mme prdicat que le but prouver, en vue de lunification. Sil nen trouve pas, il sattaque aux rgles et cherche unifier le but avec la tte de la rgle.

20

12-Dec-11

Content Starter Set

Spcificits et mcanismes fondamentaux

Les prdfinis FAIL et CUT fail Prdicat prdfini qui signifie l'chec d'un but et force la remonte. Utilis lorsque l'on veut connatre toutes les solutions d'un problme et que la remonte n'agit pas.

Spcificits et mcanismes fondamentaux

Les prdfinis FAIL et CUT


Question sans variable:
clauses pre (jean, yves). pre (jules, marie). pre (jules, ve). tous_prsents:- pre(X,Y), writef( '%w est le pre de %w', [X,Y] ). Question (but ou goal): ?- tous_prsents. %question sans variables

Rponse: jean est le pre de yves (une seule rponse car la remonte nagit pas)

Spcificits et mcanismes fondamentaux

Les prdfinis FAIL et CUT


Pour forcer la remonte on a deux solutions:

1 - Ajouter fail la fin de la clause: tous_prsents :-pre(X,Y),

writef(%w est le pre de %w',[X,Y]),fail.

2 Ajouter fail la fin de la question: ?tous_prsents, fail.

21

12-Dec-11

Content Starter Set

Spcificits et mcanismes fondamentaux

Les prdfinis FAIL et CUT

cut
- Le coupe-choix est un prdicat prdfini (not "!") qui empche la remonte. - Utilis lorsqu'on est intress seulement dans certaines solutions du problme (pas toutes). - Evite des explorations inutiles. - Permet un contrle plus fin sur le droulement d'un programme.

Spcificits et mcanismes fondamentaux

Les prdfinis FAIL et CUT


Exemple :

si dans le programme de la diapo 63 on ne veut que la premire solution, on crit : pre (jean, yves) :- ! .

Le (!) arrte la recherche des autres solutions la question : pre (X,Y).

Spcificits et mcanismes fondamentaux

Les prdfinis FAIL et CUT


Programme pour dtecter le maximum de deux nombres

max(X,Y,Y) :- X =< Y. max(X,Y,X) :- X > Y.

% Ajoutez un CUT la fin de la premire clause et vrifiez en TRACE la diffrence.

22

12-Dec-11

Content Starter Set

Spcificits et mcanismes fondamentaux

Paquet de clauses
Action du CUT dans un paquet de clauses Soient les clauses (sans CUT): a(X,Y) :- b(X), e(Y). a(X,Y) :- c(X), e(Y). Et les faits: b(1). b(2). c(3). e(4).

Le but: a(X,Y). Rponses: X=1, Y=4; X=3, Y=4; X=2, Y=4

Spcificits et mcanismes fondamentaux

Paquet de clauses
Mmes clauses (avec CUT): a(X,Y) :- b(X), !, e(Y). a(X,Y) :- c(X), e(Y). b(1). b(2). c(3). e(4).

But: a(X,Y). Rponse: X=1, Y=4

Variante: a(X,Y) :- !, b(X), e(Y). Rponse?

Spcificits et mcanismes fondamentaux

Paquet de clauses
Laction du CUT dans un paquet de clauses: - l'action du CUT s'exerce seulement sur le prdicat qui le prcde.

- les instanciations faites pour les variables de ce prdicat sont fixes et ne sont pas remises en cause lors d'une remonte.

23

12-Dec-11

Content Starter Set

Spcificits et mcanismes fondamentaux

La ngation en Prolog

NOT Utilisation de la ngation en PROLOG

Spcificits et mcanismes fondamentaux

La ngation en Prolog
Soit le programme: courageux(jean). courageux(pierre). chtif(pierre). explorateur (X) :- courageux (X), not (chtif (X)). (un explorateur doit tre courageux et pas chtif) Le but: ?- explorateur(X). X=jean %qui est explorateur?

Spcificits et mcanismes fondamentaux

La ngation en Prolog
L'usage du NOT est soumis deux restrictions : 1. Le NOT ne peut intervenir que dans le corps d'une rgle et non pas dans sa tte. Exemple :
explorateur (X) :- courageux (X), not (chtif (X))

--> correct Mais :


not (explorateur (X)) :-chtif (X)

--> incorrect

24

12-Dec-11

Content Starter Set

Spcificits et mcanismes fondamentaux

La ngation en Prolog
2. Pour prouver une condition du type not( ) il faut que toutes les variables impliques dans la ngation soient lies (remplaces par des constantes).

Explication :soit le but : "explorateur (X)" (qui est explorateur ?) Prolog cherche une rgle dont la tte est compatible avec ce but (en chanage arrire) et trouve : explorateur (X) :- courageux (X), not (chtif (X)).

Spcificits et mcanismes fondamentaux

La ngation en Prolog
Il cherche prouver la premire condition de cette rgle (courageux (X)) ce qui l'amne lier X une valeur trouve dans la base de faits: courageux(jean). Lorsqu'il s'attaque "not (chtif (X))", la variable X est donc lie et il vrifie si chtif(jean) existe* Si la rgle avait t crite sous la forme : explorateur (X) :- not (chtif (X)), courageux (X). La premire condition prouver aurait t not (chtif (X)) dans laquelle X est libre ce qui empche de continuer.

Spcificits et mcanismes fondamentaux

La ngation en Prolog

25

12-Dec-11

Content Starter Set

Spcificits et mcanismes fondamentaux

Bases de donnes dynamiques


Prdicats prdfinis pour manipuler une B.D.D. :

ASSERT: insre un nouveau fait dans la BDD ASSERTA : insre un fait en tte des faits existants ASSERTZ : insre un fait en queue des faits existants. RETRACT : retranche un fait de la B.D.D.

Spcificits et mcanismes fondamentaux

Bases de donnes dynamiques


Exemples :
On entre dans la BDD les donnes: ?- assert(pre (a, b)). ?- assert(pre (b, c)). On vrifie leur existance dans la BDD: ?- listing. pre(a,b). pre(b,c). On peut entrer aussi une rgle: ?- asserta((pre(a,b):- fils(b,a))). ?- listing. pre(a,b):- fils(b,a). pre(a,b). pre(b,c).

Spcificits et mcanismes fondamentaux

Bases de donnes dynamiques


On retire un fait de la B.D.D. avec : ?- retract (pre (a, b)).

On efface tous les pres avec ?- retract (pre (X, Z)). Ou bien: ?- retractall(pre(_, _)).

26

12-Dec-11

Content Starter Set

Spcificits et mcanismes fondamentaux

Bases de donnes dynamiques


% La BDD peut stocker les rsultats des calculs

:- dynamic stocker/3.

%prdicat dynamique

calculer(X,Y,Res):- stocker(X,Y,Res), !. calculer(X,Y,Res):- Res is (X+2)*Y, assert(stocker(X,Y,Res)).

?- calculer(3,4,X). X = 20

Spcificits et mcanismes fondamentaux

Mode TRACE
TRACE permet de suivre pas a pas le droulement du programme
?- trace.
Yes % on est en mode

trace

?- lancement dun programme... Call:... Exit...

?- notrace.

% pour sortir de

trace

Spcificits er mcanismes fondamentaux

Le prdfini FINDALL
Le prdfini FINDALL (trouver tous) affiche la Liste des Objets qui satisfont le but Goal
Syntaxe:

findall (Objet, Goal, Liste)

-Objet peut tre une variable ou un terme complexe qui contient


la variable -Le Goal instancie la variable chaque remonte

-Liste est la liste des valeurs prises par la variable

27

12-Dec-11

Content Starter Set

Spcificits er mcanismes fondamentaux

Le prdfini FINDALL

Exemple:

qui (Jean Dupont, 23, rue de Svres, 34). qui (Anne Vigier, 7, Bd. Davout, 20). qui (Jules Durand, 6, rue Rollin, 25).

?-

findall (Age, qui ( _,

_,

Age), Liste).

Rponse:

Liste = [34, 20, 25]

28

Vous aimerez peut-être aussi