Informatique et recherche
opérationnelle
IFT2030

Concepts des langages de programmation

Automne 2002


Accueil

Professeur et
Démonstrateurs

Horaires et locaux

Notes de cours

Démonstrations
et devoirs

Examens

Liens utiles

Au sujet du
livre de cours

Consultez vos notes

Foire aux questions
(FAQ)

Démonstration 9: PPP (Premiers Pas en Prolog)

Note: Pas de "baratin" cette semaine, vous démonstrateurs aborderons avec vous Prolog ce nouveau langague qu'il vous faut apprendre... Comme d'habitude un seul conseil: pratiquez !!!

Prenez notes que prochainement (je vous laisse remettre le tp2 !), un dernier tp vous sera donné à faire en Prolog.

Travail pratique (pas noté mais fortement recommandé)

Philosophie de comptoir

Soit les faits suivants:
homme(jean).
homme(paul).
homme(jacques).
femme(julie).
femme(jeanne).
femme(isabelle).

aime(jean,julie).
aime(paul,julie).
aime(jacques,jean).
aime(julie,paul).
aime(jeanne,jacques).
aime(julie,isabelle).

heureux(X) :- aime(X,Y), aime(Y,X).

    P1) Écrivez votre définition (via une relation) d'un être humain heureux en utilisant les relations existantes (et d'autres au besoin).

    P2) Écrivez votre définition (via une relation) d'un mariage entre deux être humains.

    P3) Soit la définition judéo-chrétienne du mariage entre deux individus X et Y:

    couple_legitime(X,Y) :- homme(X), femme(Y).
    couple_legitime(X,Y) :- femme(X), homme(Y).
    
    mariage_judeo(X,Y) :-
        couple_legitime(X,Y),
        aime(X,Y),
        aime(Y,X).
    

      P3.1) Effacez (à l'aide de votre interpréteur) le but: mariage_judeo(X,Y)

      P3.2) Quel problème (non philosophique) voyez-vous à cette définition ?

Arbre généalogique

À l'aide de faits du genre pere(jean,paul) dont la sémantique est jean et le père de paul, et de faits du type mere(jeanne,paul), écrire les relations suivantes:
  • A1) parent(X,Y), indiquant que X est le parent (père ou mère) de Y
  • A2) frere_ou_soeur(X,Y), indiquant que X et Y sont frères ou soeurs.
  • A3) grand_parent(X,Y), indiquant que X est le grand-parent (grand-père ou grand-mère) de Y.
  • A4) ancetre(X,Y), indiquant que X est un ancètre (parent, grand-parent ou une combinaison) de Y.
Testez vos relations de manière existentielle (avec des variables) et non existentielle.

Listes en Prolog

Écrire les prédicats suivants:
  • L1) premier(X,Y), qui est vrai lorsque X est le premier élément de la liste Y.
  • L2) dernier(X,Y), qui est vrai lorsque X est le dernier élément de la liste Y.
  • L3) sauf_dernier(X,Y), qui est vrai lorsque X est la liste Y sans son dernier élément.
  • L4) append(X,Y,Z), qui est vrai lorsque X concatené a Y est la liste Y
  • L5) membre(X,L), qui est vrai lorsque X est un élément de L
  • L6) pair(X), qui est vrai lorsque X a un nombre pair d'éléments.
  • L7) impair(X), qui est vrai lorsque X a un nombre impair d'éléments.
  • L8) elt_impair(X,Y), qui est vrai lorsque Y est la liste X privée des éléments de rang pairs.
  • L9) elt_pair(X,Y), qui est vrai lorsque Y est la liste X privée des éléments de rang impairs.
  • L10) somme_elts(X,Y), qui est vrai lorsque Y est la somme des élements de la liste X. On supposera que X est ici une liste d'entiers.
Tester tous vos prédicats de manière non existentielle (sans variable) puis existentielle. Dressez la liste des prédicats qui fonctionnent mal en questionnement existentiel.
[top]


Dernière mise à jour : Sat Nov 23 18:04:18 EST 2002
dift2030@iro.umontreal.ca