Je dois inverser les éléments d'une liste simple (une dimension). Je sais qu'il y a une fonction inverse intégrée mais je ne peux pas l'utiliser pour ça.CLISP - Inverser une simple liste
Voilà ma tentative:
(defun LISTREVERSE (LISTR)
(cond
((< (length LISTR) 2) LISTR) ; listr is 1 atom or smaller
(t (cons (LISTREVERSE (cdr LISTR)) (car LISTR))) ; move first to the end
)
)
sortie assez proche, mais est faux.
[88]> (LISTREVERSE '(0 1 2 3))
((((3) . 2) . 1) . 0)
J'ai donc essayé d'utiliser append
au lieu de cons
:
(t (append (LISTREVERSE (cdr LISTR)) (car LISTR)))
mais nous avons eu cette erreur:
*** - APPEND: A proper list must not end with 2
Toute aide?
L'utilisation de LENGTH n'est pas une bonne idée. Cela va à l'encontre de l'objectif des listes de cellules contre liées. LONGUEUR traverse toute la liste pour déterminer la longueur. –
L'erreur APPEND est un peu cryptique, mais cela signifie que le dernier des arguments n'est pas une liste, mais le numéro 2. –
Sauf erreur, votre version 'append' devrait fonctionner tant que vous faites le dernier argument dans une liste. – Marcin