T. D. Bases de données. ESIL. 2i`eme année Année universitaire

Transcription

T. D. Bases de données. ESIL. 2i`eme année Année universitaire
T. D. Bases de données.
ESIL. 2ième année
homme(paul).
UNIVERSITÉ DE LA MÉDITERRANÉE
Année universitaire 2006/2007
Enseignante : Odile Papini
homme(luc).
femme(claire).
femme(lucie).
Corection de la feuille de T. D. 5 : Premiers pas avec DATALOG
femme(andree).
femme(martine).
Exercice 1 :
2) donner la représentation des liens de parenté avec des prédicats;
2 prédicats unaires: homme(x) et femme(x) et 2 prédicats binaires :
pere(x,y) et mere(x,y).
3) écrire la base de faits représentant l’arbre généalogique ci-dessus.
4) écrire les règles DATALOG qui expriment :
– enfant(x,y) :
enfant( Child, Father ) ← pere( Father, Child).
enfant( Child, Mother ) ← mere( Mother, Child ).
– fils(x,y) :
fils( Child, Parent ) ← homme(Child), enfant(Child, Parent).
pere( leon, lucie ).
pere( pierre, jean ).
– fille(x,y) :
fille( Child, Parent ) ← femme(Child), enfant(Child, Parent).
pere( pierre, jacques ).
pere( jean, alain ).
– frere-ou-soeur(x,y) :
frere ou soeur( X, Y ) ← pere(Z, X), pere(Z,Y), mere(T, X),
mere(T,Y), X ∼=Y.
pere( jean, paul ).
pere( paul, luc ).
mere( claire, lucie ).
– frere(x,y) :
frere( X, Y ) ← frere ou soeur( X, Y ), homme(X).
mere( andree, jean ).
– soeur(x,y) :
soeur( X, Y ) ← frere ou soeur( X, Y ), femme(X).
mere( andree, jacques ).
mere( lucie, alain ).
– grand-parent(x,y) :
parent( X, Y ) ← pere( X, Y). parent( X, Y ) ← mere( X, Y ).
grand parent( X, Y ) ← parent( X, Z), parent(Z, Y).
mere( lucie, paul ).
mere( martine, luc ).
homme(leon).
– grand-pere(x,y) :
grand pere( X, Y ) ← grand parent( X, Y), homme(X).
homme(pierre).
homme(jean).
– grand-mere(x,y) :
grand mere( X, Y ) ← grand parent( X, Y), femme(X).
homme(jacques).
homme(alain).
1
2
Exercice 2 : Soit la carte d’un restaurant qui comporte pour les horsd’oeuvres : cèleri, pâté, melon; pour les viandes : rôti, steak; pour les poissons
: sole; rouget; pour les desserts : flan, fruit.
1) écrire la base de faits représentant la carte du restaurant.
export plat( Nom).
export plat( $Nom).
export repas( X, Y, Z, ).
export repas( $X, Y, Z).
hd( celeri).
export repas( X, $Y, Z).
hd( pate).
export repas( X, Y, $Z).
hd( melon).
export repas( $X, $Y, $Z).
viande( steak).
– les règles DATALOG repas(x,y,z) et plat(y).
plat(Y) ←viande(Y).
plat(Y) ←poisson(Y).
repas( X, Y, Z) ←hd(X), plat(Y), dessert(Z).
viande( roti).
poisson( sole).
poisson( rouget).
dessert( fruit).
– Quels sont les repas qui comportent du cèleri en hors-d’oeuvre ?
repas( celeri, Y, Z).
dessert( flan).
2) un repas est constitué d’un hors-d’oeuvre, d’un plat et d’un dessert,
par ailleurs, un plat peut être soit de la viande, soit du poisson. Ecrire
le schéma de la base de données, les requêtes acceptables :
database( { hd( Nom:string, Calorie:integer ),
viande( Nom:string),
poisson( Nom:string),
dessert( Nom:string)
} ).
export hd( Nom).
– Quels sont les repas qui ne comportent pas de fruit en dessert ?
repas( X, Y, Z), Z ∼= fruit.
3) Reprendre la règle repas et ajouter une boisson qui peut être de l’eau,
du vin ou de la bière. boisson(eau).
boisson(vin).
boisson(biere).
repas( X, Y, Z, T) ←hd(X), plat(Y), dessert(Z), boisson(T).
5) Ecrire la règle repas-regime(x,y,z) qui exprime que la valeur calorique
du repas est inférieure à 2000 calories. Pour cela, on attribue une valeur
calorique à chacun des mets.
export hd( $Nom).
export viande( Nom).
export viande( $Nom).
hd( celeri, 100 ).
export poisson( Nom).
hd( pate , 500 ).
export poisson( $Nom).
hd( melon, 200 ).
export dessert( Nom).
viande( steak, 300 ).
export dessert( $Nom).
viande( roti, 400 ).
3
4
poisson( sole, 150 ).
poisson( rouget, 250).
dessert( fruit, 200 ).
dessert( flan, 400 ).
repas-regime( X, Y, Z) ←hd(X, A), plat(Y, B), dessert(Z, C),
Cal = A + B + C, Cal < 2000.
5