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 :

Exercice Récursivité Listes


Sujet :

Lisp

  1. #1
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Exercice Récursivité Listes
    Bonjour tout le monde!

    Je dois écrire une fonction récursive qui récupère un élément donnée dans une liste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (garde 'a '(a a a & a & a $ a a))
    (a a a a a a a)
    Du coup j'ai écrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (defun garde (x liste)
     (cond
        ((not liste) nil)
        ((equal (car liste) x) (cons x (garde (cdr liste))))
        (t (garde (cdr liste))) ) )
    En testant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [2]> (garde 'a '(a a a & a & a $ a a))
     
    *** - EVAL/APPLY: Too few arguments (1 instead of at least 2) given to garde
    Rentrées possibles:
    ABORT          :R1      Abort main loop
    Break 1 [3]>
    En testant j'obtiens cela comme réponse. Je ne comprends pas pour quoi on me dit trop peu d'arguments, qu'il en faut 2 alors que j'en déclares bien 2.

    Merci pour vos réponses!

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    Bonjour !

    En effet, tu as oublié de fournir x dans les appels intérieurs de garde, où tu écris simplement (garde (cdr liste)).

    Du point de vue du style, not est une fonction logique. Pour vérifier si une liste est vide, il vaut mieux employer endp qui existe justement pour cela : http://clhs.lisp.se/Body/f_endp.htm

  3. #3
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Je ne trouves toujours pas..
    La dernière condition énonce le cas où la liste commencerait par autre chose que x dans ces cas le je regardes simplement le reste de la liste d'où (garde (cdr liste)), je ne comprends pas pourquoi je devrais parler de x et d'ailleurs où le mettre...

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    Tu définis garde comme une fonction de deux arguments. Donc, tu ne peux pas écrire (garde (cdr liste)), ça doit être (garde x (cdr liste)).

  5. #5
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 17
    Points : 14
    Points
    14
    Par défaut C'est bon!!
    Ah oui c'est bon merci j'ai compris!

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

Discussions similaires

  1. Problème exercice récursivité de listes/arbres
    Par infoJava67 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 06/01/2018, 02h19
  2. Réponses: 2
    Dernier message: 28/11/2014, 21h21
  3. Aide exercice Prolog liste
    Par warez29 dans le forum Prolog
    Réponses: 10
    Dernier message: 24/11/2014, 19h54
  4. Exercice sur liste chainée
    Par manou756011 dans le forum C
    Réponses: 1
    Dernier message: 04/05/2014, 21h16
  5. Exercice en listes chaînées?
    Par afterthenext dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 02/06/2009, 23h46

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