Možným riešením je implementovať funkciu vracajúcu zoznam bez posledného prvku (podobne ako v príklade except ). A výsledný zoznam zostaviť v hlavnej funkcií pomocou nej a funkcií first, last, append a cons.
; Vráti zoznam bez posledného prvku.
(defun except (zoz)
(cond ((null zoz) NIL)
((null (rest zoz)) NIL)
(T (cons (first zoz) (except (rest zoz))))
)
)
; Hlavná funkcia.
; Predpokladám, že zoznam je neprázdny, a má aspoň 2 prvky, ak by to tak
; nemalo byť, treba to v vymenfl ošetriť.
(defun vymenfl (zoz)
(cons (first (last zoz)) (append (except (rest zoz)) (cons (first zoz) NIL)))
)
; Príklady:
(vymenfl '(1 2 3 4 5)) ; -> (5 2 3 4 1)
(vymenfl '(1 2)) ; -> (2 1)