0% ont trouvé ce document utile (0 vote)
113 vues2 pages

Exercice Prolog : Arbre Généalogique

Transféré par

Mohamed Naoum
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
113 vues2 pages

Exercice Prolog : Arbre Généalogique

Transféré par

Mohamed Naoum
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Prolog

TD n°1
Premier exercice
But : définir un arbre généalogique, et pouvoir lui poser des questions...
Ébauche papier
Réaliser un arbre généalogique quelconque, mais en respectant certaines contraintes pour pouvoir
l'exploiter facilement :
• Pour s'y retrouver à la main, prendre A comme initiale des ancêtres de plus haut niveau, B
comme initiale des ancètres du niveau suivant, etc.
• Au moins 4 niveaux (5 si on code arrière grand-père). Cela donnera par exemple :
andre+augustine
|__ bernard+becassine
| |__ clement+chantal
| | |__ dudulle
| | |__ damien
| | |__ daniela
|__ babar
| |__ celestine
|__ brigitte+baptiste
|__ cedric+charlotte
| |__ didier
| |__ dagobert
| |__ dominique
|__ caroline

Codage des faits


Pour décrire un arbre généalogique, il y a les faits (ce qui est particulier à chaque famille, par
exemple que « Bécassine est une femme » ou que « Dudulle est le fils de Chantal ») et les règles (ce
qui est vrai pour toutes les familles, par exemple que « le frère du père est l'oncle »). Il y a plusieurs
tactiques pour décrire les faits, certaines plus intelligentes que d'autres. Chaque choix influera sur
les règles qui seront à définir.
Réflexions à avoir avant et pendant la création :
• Avec quel ensemble minimal de prédicats peut-on décrire complétement les faits d'un arbre
généalogique ? Autrement dit, quels prédicats sont « basiques », indispensables, et lesquels
peuvent être définis par des règles à partir des autres ? Les faits seront déclarés avec ces
prédicats, les autres seront définis dans des règles.
• Les commentaires en prolog : ils sont encadrés par /* .... */
• Faire en sorte de ne pas mettre d'informations redondantes.
Attention :
• tout ce qui commence par une majuscule est une variable (attention avec les prénoms et les
noms de fichiers !) ;
• dans les prédicats à 2 arguments, l'ordre n'est pas imposé par Prolog, c'est une convention;
on prendra toujours la convention lien_parente(X,Y) signifie «X est lien_parente Y»;
mais l'ordre utilisé dans la définition doit être le même que celui utilisé pour les questions,
bien sûr (pas de commutativité des arguments) ;
• toutes les variantes de Prolog font la distinction majuscule/minuscule, mais toutes ne
traitent pas correctement les caractères spéciaux ou accentués du français : éviter d'en
mettre dans vos prénoms et dans vos prédicats ;
• en principe, le tiret haut est utilisable dans les noms de prédicats (grand-pere, etc.), mais ça
pose parfois des problèmes par-ci par-là (confusion avec la soustraction sans doute) :
préférer le tiret bas (« _ »).
Utilisation...
1. Écrire le fichier avec un éditeur, avec une extension ".pl".
2. En vous positionnant dans le dossier contenant votre fichier, lancer la ligne de commande
"gprolog" : l'interpréteur GNUProlog se lance et affiche : |?
3. Charger le fichier en tapant
Si votre fichier contient des erreurs syntaxiques, elles vous seront signalées.
4. Poser quelques questions fermées (à réponses Yes/No) : par exemple "Andre est-il un
homme/une femme ?", "Bernard est-il un enfant de Caroline ?" , etc. Après chaque
modification du fichier, sauvegarder et recharger.
5. Quelques questions ouvertes avec une seule variable : par exemple "Qui sont les enfants de
Babar ?", etc.
6. Quelques questions ouvertes avec plusieurs variables : par exemple "Qui est parent de
qui ?", "Quels couples homme/femme ont eu un enfant ensemble ?", etc.
Règles
La formule « ∀x ∀y [enfant(x,y) ⇒ parent(y,x)] » se traduira
« parent(Y,X) :- enfant(X,Y). ».

Expliciter sous forme de règles la définition des relations suivantes :


• parent (ou enfant, suivant le choix fait initialement)
• fils, fille, père, mère
• grand_parent, petit_enfant, grand_père, grand_mère, petit_fils, petite_fille
• frere_ou_soeur, frère, soeur
• oncle_ou_tante, oncle, tante
• cousin_ou_cousine, cousin, cousine
Règle récursive
Donner la définition de la relation de parenté "être un ancêtre de"

Traduire en interrogations prolog des questions formuléees en français


• Qui est le père de Dagobert ?
• Qui est la sœur du père de Dagobert ?
• Qui est la mère du cousin du père de Dagobert ?
• etc.

Vous aimerez peut-être aussi