Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Lisp
Lisp Forum d'entraide sur la programmation en langages fonctionnels Lisp et Common Lisp
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/09/2012, 12h01   #1
Lyadrielle
Futur Membre du Club
 
Femme Chloé Garcia
Étudiant
Inscription : avril 2012
Messages : 36
Détails du profil
Informations personnelles :
Nom : Femme Chloé Garcia
Localisation : France

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

Informations forums :
Inscription : avril 2012
Messages : 36
Points : 17
Points : 17
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 :
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 :
(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.
Lyadrielle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2012, 17h26   #2
Trap D
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 443
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 443
Points : 5 310
Points : 5 310
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 :
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
Citation:
((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 : Intérieur avec jeune femme de Vilhelm Hammershoi
Trap D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2012, 20h24   #3
Lyadrielle
Futur Membre du Club
 
Femme Chloé Garcia
Étudiant
Inscription : avril 2012
Messages : 36
Détails du profil
Informations personnelles :
Nom : Femme Chloé Garcia
Localisation : France

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

Informations forums :
Inscription : avril 2012
Messages : 36
Points : 17
Points : 17
La fonction null? ne fonctionne pas chez moi.

Que veut-elle dire ? je vais chercher un équivalent.
Lyadrielle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2012, 22h04   #4
Trap D
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 443
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 443
Points : 5 310
Points : 5 310
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 : Intérieur avec jeune femme de Vilhelm Hammershoi
Trap D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2012, 14h39   #5
Lyadrielle
Futur Membre du Club
 
Femme Chloé Garcia
Étudiant
Inscription : avril 2012
Messages : 36
Détails du profil
Informations personnelles :
Nom : Femme Chloé Garcia
Localisation : France

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

Informations forums :
Inscription : avril 2012
Messages : 36
Points : 17
Points : 17
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
Lyadrielle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2012, 15h01   #6
Lyadrielle
Futur Membre du Club
 
Femme Chloé Garcia
Étudiant
Inscription : avril 2012
Messages : 36
Détails du profil
Informations personnelles :
Nom : Femme Chloé Garcia
Localisation : France

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

Informations forums :
Inscription : avril 2012
Messages : 36
Points : 17
Points : 17
Voilà le code avec mes mots clés :

(
Code :
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.
Lyadrielle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h00.


 
 
 
 
Partenaires

Hébergement Web