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 :

Problème sur fonction simple


Sujet :

Lisp

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Problème sur fonction simple
    Bonjour,

    J'apprends actuellement le lisp et j'ai quelques problèmes, notamment avec la compréhension des retour de fonctions.

    J'ai une BaseTest, constituée d'une liste de personnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (setq BaseTest '((Dupond Pierre Lyon 45 150)
    (Dupond Marie Nice 32 200)
    (Dupond Jacques Lyon 69 20)
    (Perrot Jacques Geneve 28 500)
    (Perrot Jean Nice 55 60)
    (Perrot Anna Grenoble 19 180)
    ))
    La fonction que je cherche à faire :
    En argument, je prends la BaseTest et je dois ressortir une liste composée des personnes dont le nom est Perrot.

    Voilà ce que j'ai essayé de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (defun F2 (base) (dotimes (i (length base)) (if(member 'Perrot (nth i base)) (setq liste(list(member 'Perrot (nth i base)))) (return-from F2 liste))))
    Je ne pense pas avoir bien saisir le rôle de la fonction 'return-from' d'une part ... et la fonction me renvoie forcément la dernière valeur de la BaseTest!

    Comment faire pour tout renvoyer ?

    Merci pour votre aide.

  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
    Je ne connais pas bien la syntaxe LISP mais il faut peut-être faire un append des résultats connus avec l'appel de la fonction.
    D'après ton code, mais je ne sais pas où tu en es de l'apprentissage du LISP, tu n'utilises pas les possibilités de programmation fonctionnelle du LISP.
    Je penses que tu as entendu parler de car et cdr pour les listes non ?
    Voilà ce qu'on pourrait écrire en Scheme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (define (F2 Liste)
      (cond ((null? Liste) Liste)
            ((member 'Perrot (car Liste)) (cons (car Liste) (F2 (cdr Liste))))
            (else (F2 (cdr Liste)))))
     
     
    (F2 BaseTest)
    Avec comme résultat
    ((Perrot Jacques Geneve 28 500) (Perrot Jean Nice 55 60) (Perrot Anna Grenoble 19 180))
    "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
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    La fonction null? ne fonctionne pas chez moi.

    Que veut-elle dire ? je vais chercher un équivalent.

  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
    Elle teste si une liste est vide.
    "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 du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Ok, merci.;

    Le else non plus n'existe pas dans ma version -.-

    Je vais donc refaire le programme en mettant les bons clés et je reviendrai vers toi si je rencontre encore des soucis!

    merci en tout cas

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Voilà le code avec mes mots clés :

    (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    defun F2 (Liste)
      (cond ((null Liste) Liste)
            ((member 'Perrot (car Liste)) (cons (car Liste) (F2 (cdr Liste))))
            (T (F2 (cdr Liste)))))
    Encore merci.

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

Discussions similaires

  1. Problème sur fonction récursive simple
    Par zarohn dans le forum Débuter avec Java
    Réponses: 14
    Dernier message: 18/03/2010, 11h41
  2. Réponses: 10
    Dernier message: 02/12/2007, 00h13
  3. problème sur fonction diffdate
    Par Daniel MOREAU dans le forum Access
    Réponses: 11
    Dernier message: 05/09/2006, 13h47
  4. Réponses: 4
    Dernier message: 19/02/2006, 18h18

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