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 :

[Débutant] Quelques notions à préciser


Sujet :

Prolog

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 157
    Points : 67
    Points
    67
    Par défaut [Débutant] Quelques notions à préciser
    bonjours;
    je suis tous nouveau dans l'apprentissage de ce language;
    en fait j'ai besoin de savoir quelque petites notions pour pouvoir passer l'examen

    commençons si vous le voulez bien....

    nous avons une liste [a,[b,c,d] , b,[], c,[b,d], d,[e], e,[c] ] représente un graphe orienté formé par les sommets : a,b,c,d,e

    et les arcs : a-->b, a-->c, a-->d, c-->b, c-->d, d-->e, e-->c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /* pour retourner dans L la liste de tous les successeurs de X dand G */
                 existe(X,L,[X,L|G]).
                 existe(X,L,[Y,Z|G]) :- existe( X , L , G ).
    je voudrais savoir le pourquoi du comment, si vous le voulez bien comment cette fonction retourne les successeurs de X dans la liste, en particulier ce truc ( [Y,Z|G] )

    merci d'avance.

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                 existe(X,L,[X,L|G]).
                 existe(X,L,[Y,Z|G]) :- existe( X , L , G ).
    Comme tu l'as remarqué ta liste se lit 2 éléments par 2 éléments, le noeud et ses successeurs.
    La première clause existe(X,L,[X,L|G]). réussit car X est le premier élément de la liste passée en troisième argument et donc la liste des successeurs de X est l'élément L de la liste.
    La seconde clause existe(X,L,[Y,Z|G]) :- existe( X , L , G ). signifie que X ne peut pas être unifié avec Y et donc la liste des successeurs de Y (c-a-d Z) ne peut pas être unifiée avec L, donc on regarde si X peut être unifié avec le reste de la liste G.

    La notation [X,L|G] permet de parcourir une liste 2 éléments par 2 éléments.
    "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
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    merci bcp pour ton explication
    c pas de la tarte ce Prolog, surtout que c assez pauvre en documentation.

    ou bien ça revien peut être au fait que g pas bien suivit mon cour de logique en 2e année c'etait barbant

  4. #4
    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
    Tu as bien sûr consulté ces pages...
    ou bien ça revien peut être au fait que g pas bien suivit mon cour de logique en 2e année c'etait barbant
    Prolog = Programmation Logique != Programation barbante, enfin pour moi en tout cas
    "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

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    désolé si je t'ai offencer, mais je visais pas la programation mais nôtre cour de logique, vu le contenu, logique des prédicats et companie...., et les notes n'etaient pas très réjuissantes, en tout cas merci

  6. #6
    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
    Aucun problème
    "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

  7. #7
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Quelques remarques :
    - Dans certains Prologs (la plupart ?), le compilateur lèvera un warning sur le fait que G, dans la première clause, et Y et Z, dans la seconde, sont des "singletons".
    - Trap D : dans la deuxième clause, rien ne dit que X ne peut pas être unifié avec Y. Si le format de représentation du graphe fait qu'un noeud n'apparaît qu'une fois dans la liste, alors le programme est sous-optimal (il y aura un peu de calcul "pour rien", et surtout il demandera systématiquement si on veut une autre solution, qui répondra fail). Sinon (dans le cas curieux où l'on peut spécifier deux ensembles de successeurs pour un même noeud) il proposera bien les divers ensembles de successeurs en tant que diverses unifications possibles de L, au lieu d'en faire l'union.

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

Discussions similaires

  1. [Débutant] Quelques questions bêtes...
    Par Stomp dans le forum Windows
    Réponses: 2
    Dernier message: 02/08/2019, 11h47
  2. Réponses: 17
    Dernier message: 11/11/2008, 12h17
  3. [Débutant] Quelques questions d'ordre général
    Par salseropom dans le forum Fortran
    Réponses: 3
    Dernier message: 22/10/2007, 15h21
  4. Quelque notion avant de commencer
    Par mitherkiller dans le forum Etudes
    Réponses: 3
    Dernier message: 16/04/2007, 14h18
  5. [Débutant]Quelques questions de principe sur l'API win32
    Par silver_dragoon dans le forum Windows
    Réponses: 4
    Dernier message: 19/03/2004, 18h38

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