Fonction inverse en scheme

Fermé
marina - 3 mars 2008 à 21:49
 amigo - 4 mars 2008 à 16:19
Bonjour,
je cherche à écrire en scheme une fonction qui prend en paramètre une liste et qui me renvoie la liste inverse , exemple :

(inverse '(1 2 3 4)) -> (4 3 2 1)

Je pensais utiliser plusieurs fonctions imbriquées , dont une qui parcours la liste et arrivée au dernier élément elle s'appelle elle meme , fait le chemin inverse et affiche les valeurs , mais l'algo n'est pas bon , quelqu'un a t'il une idée ?

merci beaucoup .
A voir également:

2 réponses

Mon niveau de prog?

En fait j'avais pris des cours de programmation structurée au cours du CNAM pour etre analysre programmeur, mais en cours du soir c'est dur après une journée de travail. J'ai laissé tomber, mais j'ai quand meme garder le principe de monter un programme. Ensuite j'ai appris le Pascal, un peu le C sous UNIX, et le Visual Basic sous Windows pour développer des petite appli pour mon boulot. Je connais assez bien AutoLisp pour AutoCad, j'ai programmé pas mal de petits utilitaires pour mon bureau d'etudes; le scheme ressemble beaucoup au Lisp, mais il y a beaucoup de choses que je ne retrouve pas.

Voila pour les présentations

Et voila ton exo inverse. C'est tout pour aujourd'hui.
(define (inverse L)
  (if (pair? L)
      (reverse L)
      #f))

;test
(inverse '(1 2 3 4 5 6)); -> (6 5 4 3 2 1)
(inverse ()) ; -> #f
0
merci bcp amigo , mais malheureusement je n'ai pas le droit d'utiliser la fonction reverse , ça serait trop facile , donc si tu es là je te dis à demain .
0
Bonjour,

J'ai résolu ton exo avec la fonction do

Algo
Fonction Inverse L
Faire Tantque L non NULL
Li = Nouvelle liste (1er elem L + Li)
L= L - (1er elem)
Retourner Li

(define (inverse L)
  (let ((L L)) 
       (do ((L L (cdr L))  
          (Li '() (cons (car L) Li))) 
          ((null? L) Li)))   
)

;test
(define A '(0 1 2 3 4 5 6 7 8 9))
(inverse A); -> (9 8 7 6 5 4 3 2 1 0)
(define B '(a b c d e f g h i j))
(inverse B); -> (j i h g f e d c b a)
0