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 :

Fonction récursive : ignorer un élement


Sujet :

Lisp

  1. #1
    Membre actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Points : 215
    Points
    215
    Par défaut Fonction récursive : ignorer un élement
    Bonjour,

    Est-ce qu'il est possible de créer une fonction récursive qui ignore le premier élément d'une liste tout en utilisant la suite des éléments de la liste ?

    J'aimerais utiliser la méthode avec des cons et non celle avec rplacd (qui modifie et enregistre une new liste ) , car avec cons , c'est juste l'affichage de la liste qui est modifié .
    _""""Cats have a big heart ^^ unlike some bad people (whose will never change in their brain) """

  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
    Tu pourrais donner un exemple précis de ce que tu veux faire car la fonction qui ignore le premier élément d'une liste c'est (cdr liste).
    "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 actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Points : 215
    Points
    215
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Tu pourrais donner un exemple précis de ce que tu veux faire car la fonction qui ignore le premier élément d'une liste c'est (cdr liste).
    J'espère que Wiztricks n'est pas là

    Si je veux jeter le car d'une liste parce qu’il n'est pas un nombre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (defun fonction (liste)
       (cond 
          ((atom liste) nil) 
          ((numberp (car liste)) (cons (cdr liste) (fonction (cdr liste)))
          ((fonction (cdr liste)) ) )
    PS : je cherche juste un petit indice
    _""""Cats have a big heart ^^ unlike some bad people (whose will never change in their brain) """

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 35
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    Citation Envoyé par Kurodiam Voir le message
    J'espère que Wiztricks n'est pas là
    Si je veux jeter le car d'une liste parce qu’il n'est pas un nombre :
    Si tu veux obtenir cela ex:
    _$ (fonction '(1 2 3.0 a "toto" 5))
    (1 2 3.0 5)


    Tu y es presque, je t'ai souligné les erreurs, je te laisse réfléchir un peu pour les corriger.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (defun fonction (liste)
       (cond 
          ((atom liste) nil) 
          ((numberp (car liste)) (cons (cdr liste) (fonction (cdr liste))) 
          ((fonction (cdr liste)) ) )

    A+
    (Ps: + Erreurs de parenthèses ligne 4 & 5)
    (Ps bis: J'ai volontairement souligné atom, bien qu'avec cette fonction cela fonctionne...)

  5. #5
    Membre actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Points : 215
    Points
    215
    Par défaut
    Merci pour ton aide

    Voici ma correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    (defun fonction (liste)
       (cond 
          ((null liste) nil) 
          ((numberp (car liste)) (cons (car liste) (fonction (cdr liste))))
          ((fonction (cdr liste))) ) )
     
    (fonction '(1 2 3.0 a "toto" 5))
    (1 2 3.0 5)
    Maintenant , je vais réfléchir à faire la même chose avec des sous-listes genre '((a 3 6 9)) ((b 7 2 1)). Cependant , j'aimerais savoir si la profondeur joue un certain rôle , dans l'exemple '((a 3 6 9)) (b 7 2 1)) , il y'a bien un seul niveau de sous-listes , non ?

    Je vais surement devoir utiliser un opérateur '+' , ou bien la fonction list ...
    _""""Cats have a big heart ^^ unlike some bad people (whose will never change in their brain) """

  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
    L'exemple est surtout incorrect : '((a 3 6 9)) (b 7 2 1)) , il devrait être écrit '((a 3 6 9) (b 7 2 1)) . Ici il n'y a qu'un seul niveau de sous liste.
    Tu n'a besoin que de cons, car et cdr.
    "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 actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Points : 215
    Points
    215
    Par défaut
    Citation Envoyé par Trap D Voir le message
    L'exemple est surtout incorrect : '((a 3 6 9)) (b 7 2 1)) , il devrait être écrit '((a 3 6 9) (b 7 2 1)) . Ici il n'y a qu'un seul niveau de sous liste.
    Tu n'a besoin que de cons, car et cdr.
    Effectivement , tu as un très bon coup d’œil , merci pour la correction
    Entretemps , je vais relire mon cours !
    _""""Cats have a big heart ^^ unlike some bad people (whose will never change in their brain) """

Discussions similaires

  1. fonction récursive: erreur
    Par calla29 dans le forum Débuter
    Réponses: 3
    Dernier message: 16/05/2006, 11h51
  2. [VB6] XML, fonction récursive de recherche
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/04/2006, 21h27
  3. [XSLT] fonction récursive à N niveaux
    Par Mike35 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/03/2006, 12h30
  4. Fonction récursive renvoi sur page d'erreur
    Par peck dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 10h08
  5. Problème de fonction récursive avec un TcxDBTreeList
    Par isachat666 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 05/12/2005, 13h12

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