Я хочу написать функцию, которая удаляет конечные нули из списка. Сначала я попытался написать это элегантно с помощью рекурсии, но в итоге получилось так:
(defun strip-tail (lst)
(let ((last-item-pos (position-if-not #'null lst :from-end t)))
(if last-item-pos
(subseq lst 0 (1+ last-item-pos)))))
; Test cases.
(assert (eq nil (strip-tail nil)))
(assert (eq nil (strip-tail '(nil))))
(assert (equal '(a b) (strip-tail '(a b nil nil))))
(assert (equal '(a nil b) (strip-tail '(a nil b nil))))
(assert (equal '(a b) (strip-tail '(a b))))
Возможно, ясно, но я не уверен. Есть ли более хитрый способ сделать это?