On parle darbre de recherche dune question *Racine de larbre : question *Nœuds : points de choix (formule à démontrer) *Passage dun nœud vers son fils en considérant lune des règles et en effectuant une unification et une étape (pas) de démonstration CSI2520
*Nœuds de gauche à droite dans lordre de déclaration des règles *Nœuds d'échec : aucune règle ne permet de démontrer la première formule du nœud *Nœuds de succès : ne contient plus aucune formule, tout a été démontré et les éléments de solution sont trouvés en remontant vers la racine de larbre CSI2520
Pour résoudre une question, Prolog construit larbre de recherche de la question Parcours en profondeur dabord *nœud de succès : cest une solution, Prolog laffiche et cherche dautres solutions *nœud d'échec : remontée dans larbre jusqu'à un point de choix possédant des branches non explorées CSI2520
On parle de backtracking. Si un tel nœud de choix nexiste pas, la démonstration est terminée, il ny a pas dautres solutions. Possibilité de branche infinie et donc de recherche sans terminaison… Attention à : *ordre des littéraux dans la queue de clause *ordre des clauses CSI2520
f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y).
CSI2520
pere(charles,jean). noble(henri). noble(louis). noble(charles). noble(X):- pere(Y,X), noble(Y). pere(charles,jean). noble(X):- pere(Y,X), noble(Y). noble(henri). noble(louis). noble(charles). pere(charles,jean). noble(henri). noble(louis). noble(charles). noble(X):- noble(Y), pere(Y,X). ?- noble(jean).
CSI2520 aime(vincent,mimi). aime(marcel,mimi). jaloux(X,Y) :- aime(X,Z),aime(Y,Z). ?- jaloux(X,Y). Combien de solutions? … 4
CSI2520 Ils permettent dutiliser une syntaxe infixée, préfixée ou suffixée pour écrire des prédicats. Ils ont des priorités différentes.
CSI2520 Trois types : *Opérateur binaire infixé : il figure entre ses 2 arguments et désigne un arbre binaire X + Y *Opérateur unaire préfixé : il figure avant son argument et désigne un arbre unaire -X *Opérateur unaire suffixé : il figure après son argument et désigne un arbre unaire (Ex : X^2)
CSI2520 Associativité : *A gauche : *X op Y op Z est lu comme (X op Y) op Z *A droite : *X op Y op Z est lu comme X op (Y op Z) *Non associatif : les parenthèses sont obligatoires *la syntaxe X op Y op Z est interdite
CSI2520 Déclaration des opérateurs : *possibilité de modifier la syntaxe Prolog en définissant de nouveaux opérateurs *définition : par lenregistrement de faits de la forme suivante op(Priorite, Specif, Nom) *Nom : nom de lopérateur *Priorite :compris entre 0 (le plus prioritaire) et 1200 *Specif :type de l'opérateur (infixé, associatif…)
CSI2520 Infix: xfx non-associative xfy right to left yfx left to right Prefix fx non-associative fy left to right Postfix: xf non-associative yf right to left
CSI2520 is_in(apple, room(kitchen)). :-op(35,xfx,is_in). ?- apple is_in X. X = room(kitchen) ?- X is_in room(kitchen). X = apple ?- is_in(banana, room(kitchen)) = banana is_in room(kitchen). yes
CSI2520 :-op(33,fx,room). ?- room kitchen = room(kitchen). yes ?- apple is_in X. X = room kitchen pear is_in room kitchen. ?- is_in(pear, room(kitchen)) = pear is_in room kitchen. yes
CSI2520 :-op(35,xfy,is_in). ?- key is_in desk is_in office = is_in(key, is_in(desk, office)). yes :-op(35,yfx,is_in) ?- key is_in desk is_in office = is_in(is_in(key, desk), office). yes
CSI2520 :-op(100, xfx, a_des). :-op(100, xfx, est_un). Animal a_des ailes :- Animal est_un oiseau.