01.07.2013 Views

UE ELFE - Programmation Logique SWI-Prolog - LIFL

UE ELFE - Programmation Logique SWI-Prolog - LIFL

UE ELFE - Programmation Logique SWI-Prolog - LIFL

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

6. collegues( ?Nom1, ?Nom2) Deux employés sont collègues s’ils travaillent dans la même entreprise.<br />

Pour éviter d’avoir deux foi sle même nom, on peut tester la différence d’unification entre deux variables en<br />

utilisant le prédicat \== (utilisez help).<br />

7. plus ancien que( ?Nom1, ?Nom2) On se base sur l’ancienneté dans l’entreprise.<br />

8. plus ancien collegue que( ?Nom1, ?Nom2)<br />

9. gagne plus que( ?Nom1, ?Nom2, ?Salaire) Salaire représentant la différence de salaire entre les deux<br />

employés uniquement si le premier gagne plus que le second.<br />

10. superieur( ?Nom1, ?Nom2) Un employé est le supérieur d’un autre s’il travaille dans la même entreprise,<br />

mais à un échelon strictement supérieur.<br />

11. echelon normal( ?Nom, ?Ech) L’échelon normal d’un employé se calcule comme suit : lorsque l’on arrive<br />

dans l’entreprise on est à l’échelon 1, puis on gagne un échelon tous les quatre ans jusqu’à atteindre l’échelon<br />

5, qu’on ne peut dépasser.<br />

L’opérateur de division entière est // (utilisez help)<br />

12. victime( ?Nom) Un employé est une victime si un de ses collègues ayant moins d’ancienneté que lui est son<br />

supérieur.<br />

13. est exploite( ?Nom) Un employé est exploité s’il a un échelon inférieur à son échelon normal.<br />

14. a plaindre( ?Nom, ?Raison) La variable Raison pourra prendre ses valeurs dans l’ensemble suivant :<br />

{victime, exploite, lesDeux}, sachant qu’un employé est à plaindre s’il est soit une victime, soit exploité,<br />

soit les deux à la fois. (nécessite l’opérateur de négation “\+”).<br />

Exercice 2 : Autre exemple et introduction à la récursivité simple : L’arbre généalogique<br />

On dispose de la généalogie décrite dans l’arbre de la figure 1.<br />

Jean Paule<br />

Luc Cathy Bertand Nancy Francis Corinne Anne Sam<br />

Audrey<br />

Marcelle Henri Annie Tom Sylvie<br />

Marc Jules Aude Thomas<br />

Figure 1: Arbre généalogique utilisé<br />

Nicolas<br />

Q 1 . Le fichier tp1-genealogie-donnees.pl contient les faits permettant de définir cet arbre généalogique<br />

à partir des prédicats :<br />

individu( ?Nom, ?Sexe)<br />

pere( ?Nom1, ?Nom2) , Nom1 est le père de Nom2<br />

mere( ?Nom1, ?Nom2) , Nom1 est la mère de Nom2<br />

Il est disponible depuis le portail de la licence (http://www.fil.univ-lille1.fr/Licence→ S5→<strong>ELFE</strong><br />

→ Semainier).<br />

Q 2 . Écrivez les prédicats suivants :<br />

1. parent( ?Nom1, ?Nom2) : Nom1 est le père ou la mère de Nom2.<br />

2. est frere de( ?Nom1, ?Nom2) : Nom1 est le frère de Nom2.<br />

3. est soeur de( ?Nom1, ?Nom2) : Nom1 est la sœur de Nom2.<br />

4. sont frere et soeur( ?Nom1, ?Nom2) .<br />

5. est demi frere de( ?Nom1, ?Nom2) : Nom1 est le demi-frère de Nom2.<br />

6. est demi soeur de( ?Nom1, ?Nom2) : Nom1 est le demi-frère de Nom2.<br />

7. sont cousins( ?Nom1, ?Nom2) : Nom1 est Nom2 sont cousin(e)s, càd deux de leurs parents sont frère ou<br />

sœur.<br />

Q 3 . En utilisant la récursivité, écrivez les prédicats suivants :<br />

1. ancetre( ?Nom1, ?Nom2) :Nom1 est ancêtre de Nom2.<br />

2. descendant( ?Nom1, ?Nom2) :Nom1 est un descendant de Nom2.<br />

3. sont apparentes( ?Nom1, ?Nom2) . Deux individus sont apparentés s’ils ont au moins un ancêtre commun.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!