IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Prolog Discussion :

Problème pour comprendre l'unification en Prolog


Sujet :

Prolog

  1. #1
    Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Problème pour comprendre l'unification en Prolog
    Bonjour tout le monde.

    J'ai un exercice de ce style.

    Given the Prolog program below and the query value(W), trace the solution to the query. Show your work.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    value(Y) :- quality(Y),rarity(Y). 
    quality(Y) :- few(Y), age(Y).
    rarity(Y).
    few(5).
    few(2).
    age(Y).
    Je sais que la réponse est 5, mais je ne vois pas du tout comment marche le trace pour cette Query.
    Pouvez vous m'aider?

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    En fait, il y a deux réponses 5 et 2 !
    Lorsque vous déclarez la clause value(Y) :- quality(Y),rarity(Y). vous affirmez que le but value(Y) est vrai si les buts quality(Y) et rarity(Y) sont vrais.
    La clause quality(Y) :- few(Y), age(Y). indique que quality est vrai lorsque few et age sont vrais.
    Le but few est vrai uniquement lorsque l' argument est 5 ou 2. (attention à l'ordre d'écriture des clauses.
    La clause rarity(Y). indique que rarity est vrai quelque soit l'argument Y. (d'ailleurs vous devriez écrire rarity(_).. pour éviter d'avoir un warning à la compilation).
    La clause age(Y). indique que age est vrai quelque soit l'argument Y.

    Maintenant lorsque vous posez la question value(Y) que fait Prolog ?
    Il regarde la clause value(Y), il voit que le but quality doit être étudié, il regarde la clause quality voit que few doit être étudié, regarde la première clause few trouve 5 pour unifier Y, Prolog regarde ensuite si avec 5 age est satisfait, oui, donc le premier but de quality (few) réussit, on regarde pour age qui réusssit aussi donc une première demande réussit avec 5 et il répond 5.
    Maintenant 2 possibilités
    - Vous appuyez sur Entrée, Prolog s'arrête.
    - Vous appuyez sur la base d'espace, Prolog (grâce à son backtrack inhérent) continue sa recherche dans la satisfaction de quality, rencontre la valeur 2, la teste et l'affiche. Si vous continuez avec la barre d'espacement, il n'y a plus de possibilités pour few et répond donc False (devrait répondre car le mode opératoire pour SWI-Prolog a changé récemment et il s'arrête de lui-même après 2).
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Candidat au Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci pour cette parfaite explication !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. besoin d'aide sur trigger
    Par devalender dans le forum SQL
    Réponses: 2
    Dernier message: 18/07/2004, 22h28
  2. [D7] Besoin d'aide sur un PChar
    Par bobby-b dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2004, 16h42
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  4. [intermedia] besoin d'aide sur script PL/SQL
    Par SteelBox dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/01/2004, 19h59
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo