|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() david pinery Inscription : mai 2010 Messages : 23 ![]() |
Bonjour,
je suis débutant en lisp je voudrais faire un code qui me permet de m'afficher le dernier d'une lisp en utilisant cdr e car cons ... merci pour votre aide. |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : septembre 2003 Messages : 4 434 ![]() |
Qu'as-tu déjà tenté ?
Comment peux-tu savoir que tu es arrivé au dernier élément d'une 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 : Intérieur avec jeune femme de Vilhelm Hammershoi |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() david pinery Inscription : mai 2010 Messages : 23 ![]() |
en fait j'ai un code qui définit les fonctions cdr et car cons, je vais créer une fonction qui met permet de renvoyer de le dernier élément d’une liste par exemple
(Dernier ‘(a b c d e)) le resultat c'est : e |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() david pinery Inscription : mai 2010 Messages : 23 ![]() |
en fait j'ai un code qui définit les fonctions cdr et car cons, je vais créer une fonction qui met permet de renvoyer de le dernier élément d’une liste par exemple
(Dernier ‘(a b c d e)) le resultat c'est : e |
|
|
00
|
|
|
#5 |
|
Membre régulier
![]() Inscription : juin 2002 Messages : 158 ![]() |
pourquoi ne pas renverser la liste et en prendre le premier élément?
|
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2010 Messages : 31 ![]() |
Salut
Tu as la fonction last @+ |
|
00
|
|
|
#7 |
![]() ![]() Inscription : septembre 2003 Messages : 4 434 ![]() |
Oui mais apparemment il ne connait que cons car et cdr.
Je pense qu'il connait aussi la récursivité.
__________________
"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 |
|
|
00
|
|
|
#8 | |
|
Invité de passage
![]() david pinery Inscription : mai 2010 Messages : 23 ![]() |
Citation:
|
|
|
|
00
|
|
|
#9 | ||||
|
Nouveau Membre du Club
![]() Inscription : juillet 2010 Messages : 31 ![]() |
Salut
Last est une fonction comme car, cdr, etc.. Si je me base sur ce qu'indique Trap D, voici une fonction itérative fonctionnant avec une boucle while, car et cdr Code :
Code :
|
||||
|
00
|
|
|
#10 |
![]() ![]() Inscription : septembre 2003 Messages : 4 434 ![]() |
Il faut éviter l'impératif dans les débuts en Lisp, essaye de faire du fonctionnel, la récursivité n'est pas un vain mot, pas de while.
Les setq devraient être interdits par les profs, (comme le scanf en C !). Ne conserve que la deuxième forme.
__________________
"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 |
|
|
00
|
|
|
#11 | ||
|
Nouveau Membre du Club
![]() Inscription : juillet 2010 Messages : 31 ![]() |
Salut
Citation:
Avec des tests au benchmark, une boucle itérative est plus rapide qu'une boucle récursive. De plus, cela évite des débordements de pile. Citation:
@+ |
||
|
00
|
|
|
#12 |
![]() ![]() Inscription : septembre 2003 Messages : 4 434 ![]() |
A mon avis, l'intérêt d'étudier le Lisp au début est de voir autre chose que la prog impérative, ce n'est pas tant le while qui m'ennuie que le setq, or tu es obligé de l'utiliser dans le while.
Pour ce qui est du scanf, tu ne peux comprendre si tu n'as jamais fait de C.
__________________
"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 |
|
|
00
|
|
|
#13 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2010 Messages : 31 ![]() |
Je n'ai jamais fait de C, un peu de pascal dans ma jeunesse.
Donc, je reste dans l'expectative pour le setq, mais tu as surement raison @+ |
|
00
|
|
|
#14 |
![]() ![]() Inscription : septembre 2003 Messages : 4 434 ![]() |
Le setq à le défaut de modifier une variable, il a ce qu'on appelle des effets de bords, et pour faire une programmation "fiable" on essaye au maximum d'éviter les effets de bords.
Dans certains langages (haskell, F#, OCaml aussi je pense) , tu ne peux pas, par défaut, modifier une variable. Si tu veux le faire, il faut déclarer explicitement que cette variable sera modifiable.
__________________
"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 |
|
|
00
|
|
|
#15 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2010 Messages : 31 ![]() |
Ok, merci
@+ |
|
00
|
|
|
#16 | |
|
Invité de passage
![]() david pinery Inscription : mai 2010 Messages : 23 ![]() |
Citation:
bonjour, j'ai fais une fonction affiche le dernier element mais juste pour une liste de trois element cad (last'(1 2 3)) le resultat 3 mais je fais une liste plus que trois il me donne juste le 3 eme element comme resulat la fonction c'est while((a0=cdr(a0)) == nil){ a1=cons(cdr(a0), nil); //a0=cdr(a0); ULprint.obj_print(a1); } |
|
|
|
00
|
|
|
#17 |
|
Invité de passage
![]() david pinery Inscription : mai 2010 Messages : 23 ![]() |
bonjour,
merci pour vous j'ai trouver la solution |
|
|
00
|
|
|
#18 | |||||
|
Invité de passage
![]() Bruno Inscription : janvier 2011 Messages : 3 ![]() |
Bonjour david0924
Etrange ta fonction avec les accolades, je ne reconnais pas la syntaxe Lisp utilisé… Sinon voici une variante (sans cadr) à la fonction proposé par Patrick_35, seulement avec car et cdr comme tu le souhaitais.. Avec if Code :
Code :
Citation:
(Ps: Pour ma dernière remarque, je m’exprime sous votre contrôle car le dialecte Lisp que j’utilise ne me permet pas de vérifier cette dernière affirmation). A+ |
|||||
|
|
00
|
|
|
#19 | ||
|
Futur Membre du Club
![]() yorick Étudiant Inscription : avril 2011 Messages : 17 ![]() |
Code :
|
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com