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écomposer la fonction Appartient Liste


Sujet :

Prolog

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 50
    Points
    50
    Par défaut Décomposer la fonction Appartient Liste
    Bonjour, je débute en prolog et je galère à comprendre le déroulement de fonctions récursive sur les listes. Le problème c'est que j'ai lu de nombreux cours sur le net mais que je n'en trouve aucun qui explique en détail comment cela marche.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    appartient(X,Liste) : X appartient à Liste
    appartient(X,[X|_N]).  //ligne 1
    appartient(X,[_Z|N]):- appartient(X,N).  //ligne 2
    Quelqu'un pourrait m'expliquer en détail ce qu'il se passe dans ce programme et comment fonctionne ces deux lignes. Voici ce que je pnse avoir compris.

    La ligne 1 est la condition d'arret. Lorsque X est le premier élément de la liste, on considère qu'il appartient à la liste ça va retourner true , si cela n'arrive jamais ça va retourner false. J'ai bon ? (Question 1)

    Si je pose la question appartient (c,[a,b,c,d]).
    Le programme va chercher
    * Ligne 1 Appartient (c, [c|a, b, c, d] ). C n'est pas le premier élément de la liste donc il va passer à la ligne 2. J'ai bien compris ? (Question 2)

    Ensuite on arrive à ligne 2, je suis perdu, je prends la queue de la regle et fais appartient (X, N). à quoi correspond N (Question 3) N= a, b, c, d ?
    et dans ce cas que veut dire appartient(X,[_Z|N]): (Question 4).

    Est ce que je pose les questions dans le bon ordre? Merci pour vos réponses.

  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
    Attention, en Prolog il n'y a pas de fonction, mais des prédicats qui réussissent ("retour" true) ou échouent ("retour" false).

    Pour comprendre le code, il faut se rappeller que [a,b,c,d] est équivalanet à [a|[b,c,d]], si tu as fait du Lisp c'est l'équivalent du car et cdr d'une liste
    En Prolog on a
    Liste --> []
    Liste --> [a | Liste]

    Donc [a] = [a|[]].

    Pour le déroulement de appartient(c, [a,b,c,d]) :

    appartient(c, [a,b,c,d])
    La règle 1 échoue car c n'est pas égal à a

    On applique donc la règle 2
    appartient(c, [a|[b,c,d]]) :- appartient(c, [b,c,d]).

    Maintenant
    appartient(c, [b,c,d]).
    La règle 1 échoue car c n'est pas égal à b

    On applique donc la règle 2
    appartient(c, [b|[c,d]]) :- appartient(c, [c,d]).

    Nouvel essai
    appartient(c, [c,d]).
    La règle 1 réussit, donc en remontant, les règle 2 réussissent.
    "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
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 63
    Points : 50
    Points
    50
    Par défaut
    Désolé pour la réponse tardive, mais un grand merci.
    Je crois que je commence à comprendre.

Discussions similaires

  1. Problème fonction affichage listes déroulantes
    Par JLDR69 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/09/2006, 19h06
  2. fonction insert (liste dbl chainée)
    Par Yoshio dans le forum C
    Réponses: 6
    Dernier message: 18/02/2006, 15h35
  3. Réponses: 2
    Dernier message: 07/02/2006, 14h35
  4. fonction combinée: liste de choix + input text
    Par jflebegue dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 01/09/2005, 18h38
  5. Réponses: 1
    Dernier message: 20/07/2005, 09h13

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