Bonjour,
Il m'arrive quelque chose d'incompréhensible (en tout cas pour moi). Appliquer la fonction reverse dans le corps de la fonction et au résultat de la fonction n'a pas le même effet:
Cas n° 1:
Résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 (defun decompose (nb) ; renvoie la liste des chiffres qui composent le nombre ex: 123 -> '(1 2 3) (labels ((dcmp (n) (cond ((= n 0) nil) (:else (let* ((div (truncate (/ n 10))) (r (- n (* div 10)))) (cons r (decompose div))))))) (let ((res (dcmp nb))) (reverse res)))) ; reverse dans le corps de la fonction
Cas n° 2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CL-USER> (decompose 123) (2 1 3)
Résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 (defun decompose (nb) (labels ((dcmp (n) (cond ((= n 0) nil) (:else (let* ((div (truncate (/ n 10))) (r (- n (* div 10)))) (cons r (decompose div))))))) (let ((res (dcmp nb))) res)))
Mon implémentation de CL est Clozure CL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CL-USER> (reverse (decompose 123)) ; reverse en dehors (1 2 3)
Quelqu'un a une idée?
Merci d'avance
Partager