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 :

svp aider moi ..j'arrive pas comprendre la recursivité en prolog


Sujet :

Prolog

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Points : 16
    Points
    16
    Par défaut svp aider moi ..j'arrive pas comprendre la recursivité en prolog
    j'arrive pas a comprendre la recursivité en prolog concernant les liste les fonction longueur,renverser,nieme,concatenation,...
    et quand j recopie la solution et je fait la trace j comprend rien du tout sachant que j'utilise swi-prolog
    ...... svp 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
    IL faut être un peu plus précis !
    Donnez un exemple de code où vous ne comprenez pas, expliquez ce qui pose problème, ce sera plus simple.
    "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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Points : 16
    Points
    16
    Par défaut ok
    voila un exemple qui calcul le maximum d'une liste, je veux comprendre coment prolog reflichi c'set a dire la trace. cette solution n'est pas la mienne!

    maxlist([X], X).
    maxlist([X|R], N):-maxlist(R,M),(M>X,N is M,!; N is X).

  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
    La première clause, maxlist([X], X). signifie que le maximum d'une liste qui n'a qu'un seul élément X est X. C'est ce qu'on appelle le cas de base.
    La deuxième clause :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    maxlist([X|R], N):-
       maxlist(R,M),
       (M>X,N is M,!; N is X).
    Première chose, en Prolog, (et d'ailleurs comme en Lisp), on accède très simplement au premier élément d'une lste et à son reste.
    Une liste décrite par [X|R] permet d'accéder au premier élément de la liste X, on dit que X est unifié avec le premier élément, et T est unifié avec le reste de la liste.
    Par exemple, si [a,b,c] = [X|R] alors X est unifié avec a et R avec [b,c].
    Dans le cas où on a [a] = [X|R] alors X = a et R = [].
    Maintenant revenons à la deuxième clause.
    Une méthode très courante en Prolog, lorsqu'on travaille sur une liste est de calculer d'abord ce que l'on recherche avec le reste de la liste (maxlist(R,M)) puis de regarder ce que l'on a.
    M est le maximum du reste de la liste. On compare donc M avec le premier élément de notre liste X.
    Donc si M est plus grand que X, alors le plus grand élément de la liste [X|R] est M (qui est unifié avec le N deuxième argument du prédicat), sinon c'est X.
    A noter que la condition est très mal écrite, on devrait plustôt utiliser le -> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    maxlist([X|R], N):-
        maxlist(R,M),
        (M>X ->N = M; N = X).
    Ce qui a été écrit (M > X, N is M, !; N is X) se lit "M est plus grand que X est vrai, N is M est vrai, et tous les points de choix possibles dans le prédicat sont supprimés", c'est le ! ou cut, ce qui signifie que la clause suivante N is X ne pourra jamais être réalisée.
    Si maintenant M n'est pas supérieur à X, alors on saute après le ';' donc N is X est vrai.
    Je te rappelle qu'en Prolog, la virgule signifie "et", le point virgule "ou".
    "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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    merci bcp c'est tres clair maintenant
    reste la syntaxe sa veut dir quoi -> ( "alors" c'est ça )
    en plus pour faire l'affectation on utilise "is" et non " = "

  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
    c'est le if then else
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if M > X then N = M else N = X
    donne
    "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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    l'affectation et unification c'est quoi la difference

  8. #8
    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
    Il n'y a pas d'affectation en Prolog.
    Une variable possède une valeur ou pas. Elle est unifiée ou non unifiée.
    Une fais qu'une variable possède une valeur (qu'elle est unifiée donc) elle ne change plus jamais de valeur.
    On ne peut donc pas faire comme en C I is I+1, cela échouera toujours.
    "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

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    merci

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

Discussions similaires

  1. J'arrive pas à comprendre ce root
    Par peck dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 30/05/2008, 14h26
  2. Réponses: 1
    Dernier message: 17/04/2008, 14h58
  3. Réponses: 0
    Dernier message: 02/10/2007, 11h02
  4. j'arrive pas à comprendre ce Message d'erreur
    Par casho dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 11/12/2006, 10h00

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