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

Lisp Discussion :

Question sur condition


Sujet :

Lisp

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Points : 11
    Points
    11
    Par défaut Question sur condition
    Bonjour,

    j'ai un petit soucis pour la mise en pratique de condition de maniere recursive.
    J'ai le systeme de base à savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (cond
      (condition A resultat A)
      (condition B resultat B) 
         etc...
      (resultat Z si aucune condition ok)
    Afin de mettre ce truc en 'pratique' je me suis dit que j'allais faire une sorte de fonction qui me donnerait l'emplacement des A dans une liste (je debute ).
    J'ai donc fait un truc de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    (defun trouveA (lis)
     (cond
      ((atom lis) 0)
      ((equal (car lis) 'A) (+ 1 (trouveA (cdr liste))) )
      ((trouveA (cdr liste)))
     )
    )
    Et la ca marche pas j'ai bien 0 si A absent de lis et 1 si present mais j'ai pas sa place dans la liste

    Quelqu'un pourrait m'aiguiller ?
    Merci

  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
    Définis bien ton programme, tu veux trouver la position du premier A ou la liste des positions des A de ta liste ?
    Ce n'est pas tout à fait la même chose.

    As-tu d'abord écrit un pseudo-code en français t'indiquant la marche à suivre et qui fonctionne correctement ?
    "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
    Profil pro
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Merci de ta reponse Trap.
    En fait, je veux pas forcemment la liste (pour commencer) des positions de A mais juste la premiere occurence.
    Un truc genre : je fournis la liste B C A et il me ressort 2 (commencement à 0).

    Ca devrait être en algo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Debut
     Parcourir liste
       Tant que element present
         ajouter 1
          si element A trouvé 
            fin du programme
          fin si
       fin tant que
    fin
    Il y a une recursivité avec ces deux cas :
    si A present : sortie avec affichage du rang
    si A non present : sortie avec affichage Non present

    Le pb c'est que avec ce que j'ai écris plus haut, dés que je tombe sur A, je quitte sans sa position Ca fait plus 'test de présence' que position dans la liste.

  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
    "Fin du programme" devrait peut-être être remplacé par "retourner position du caractère".
    Pense aussi à retourner une valeur lorsqu'il n'y a rien de trouvé.

    Maintenant essaie de transformer ton algo en algo récursif, ici il est itératif.
    "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 éclairé

    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Points : 837
    Points
    837
    Par défaut
    Tu as du t'empatouiller un peu dans tes conditions. Regarde bien ce que le programme fait s'il trouve A, c'est vraiment ce que tu veux?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Je viens de trouver :
    En fait je ne prenais pas le bon chemin quand à l'algo utilisé. Celui-ci est plus adéquat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Debut
     Si A absent de liste, compteur = nil
      Sinon
       Si premier caractere = A, compteur = 0
       Sinon compte caracteres jusqu'à ce que A trouvé  
       finSi
     finSi
    Fin
    Ce qui me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (defun trouveA (liste)
      (cond
        ((not (member 'A liste)) nil)
        ((equal (car liste) 'A) 0)
        ((+ 1 (trouveA (cdr liste)))) ) )
    Merci à vous deux

  7. #7
    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
    Ben non, tu n'as pas exploité correctement le concept de liste.
    En Lisp une liste est constituée du premier élément et du reste de cette liste. La prog doit s'appuyer sur ce concept.
    Ton prog ne doit donc étudier que le premier élément de cette liste, prendre une décision, et suivant cette décision continuer avec le reste de la liste ou pas.

    Maitenant quel est le cas d'arrêt général ? Eh bien que cette liste soit vide !

    Peut-être auras-tu besoin d'un argument supplémentaire dans ta fonction...
    "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

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

Discussions similaires

  1. [VBSCRIPT] question sur l'évaluation d'une condition IF
    Par Johann7751 dans le forum VBScript
    Réponses: 2
    Dernier message: 30/05/2009, 13h09
  2. Réponses: 11
    Dernier message: 01/05/2007, 00h15
  3. Question sur une condition d'un exemple de la FAQ
    Par Bleys dans le forum Delphi
    Réponses: 3
    Dernier message: 08/08/2006, 12h43
  4. Réponses: 3
    Dernier message: 11/06/2006, 12h09

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