2

Click here to load reader

12 quelques prédicats prédéfinis de swi

Embed Size (px)

Citation preview

Page 1: 12  quelques prédicats prédéfinis de swi

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

Page 2: 12  quelques prédicats prédéfinis de swi

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.