Click here to load reader
Upload
siham-rim-boudaoud
View
96
Download
0
Embed Size (px)
Citation preview
Quelques prédicats prédéfinis de SWI-Prolog
L’affichage du contenu du fichier chargé se fait par :
?- listing.
L’affichage d’une clause particulière, ici toto, se fait par :
?- listing(FoncteurDeLaClause).
La longueur d’une liste
?- length([a, b, c],3).
Yes
?- length([a, [a, b], c], N).
N = 3
Prédicats de type integer
?- integer(3).
Yes.
?- integer(X).
No.
Utilisation: integer(X), integer(Y), Z is X+Y;
number : est-ce un nombre?
?- number(3.14).
Yes.
float : est-ce un flottant?
atom : est-ce un atome?
?- atom(homme).
Yes.
?- atom(3).
No
atomic (ou constant dans certains Prolog) : Est-ce un atome ou un nombre?
var : est-ce une variable non instanciée?
?- var(X).
Yes.
?- X = f(Z), var(X).
No
nonvar. Le contraire de var.
?- nonvar(X).
No
compound. Est-ce que le terme est composé?
?- compound(X).
No.
?- compound(f(X, Y)).
Yes
Opérateurs de comparaison:
X > Y
X < Y
X >= Y
X =< Y
X =:= Y les valeurs de X et Y sont identiques
X =\= Y les valeurs de X et Y sont différentes
T1 == T2 : si les termes T1 et T2 sont littéralement égaux .
i.e. ont la même structure et leur composants sont les mêmes.
T1 \== T2 : est vrai si T1 == T2 est faux
Exemples:
?- f(a,b) == f(a,b).
yes
?- f(a,b) == f(a,X).
no
?- f(a,X) == f(a,Y).
no
?- X \== Y
yes
?- t(X, f(a,Y)) == t(X, f(a,Y)).
yes
Opérateur (=)
X = Y permet d’unifier X et Y (possibilité d’instanciation de variable.
Exemples:
?- 1 + 2 = 2 + 1.
no
1 + 2 =:= 2 + 1.
yes
?- 1 + A = B + 2.
A = 2
B = 1
Prédicats de manipulation de la BD :
Ajout et suppression de clauses (règles) en cours d’exécution :
assert(C): ajout de la clause C à la base de données.
retract(C): Suppression des clauses unifiable avec C.
asserta(C): ajout de C au début de la base de données.
assertz(C): ajout de C en fin de la base de données.
Repeat
Le prédicat repeat est toujours vrai (succès) et à chaque fois qu’il est rencontré, une nouvelle branche
d ’exécution est générée.
bagof and setof
› La résolution Prolog peut trouver toutes les solutions satisfaisant un ensemble de
buts.
› Mais lorsqu’ ’une nouvelle solution est générée, la solution précédente est perdue.
› Les prédicats bagof,setof et findall permettent de collecter ses solutions dans une
liste.
bagof(X,P,L):
permet de produire la liste L de tout les objets X vérifiant P.
Utile si X et P admettent des variable en commun.
setof(X,P,L):
idem que bagof. Les éléments de la liste sont ordonnées et sans répétitions.