Это зависит от того, что вы подразумеваете под "элегантностью", но как насчет ...
(defun set-nth (list n val)
(if (> n 0)
(cons (car list)
(set-nth (cdr list) (1- n) val))
(cons val (cdr list))))
Если у вас есть проблемы с легким пониманием рекурсивных определений, то небольшое изменение nth-2 (как предложено Терье Нордерхаугом) должно быть более «самоочевидным» для вас:
(defun set-nth-2bis (list n val)
(nconc (subseq list 0 n)
(cons val (nthcdr (1+ n) list))))
Единственный недостаток эффективности, который я вижу в этой версии, состоит в том, что обход до n-го элемента выполняется три раза вместо одного в рекурсивной версии (однако это не хвостовая рекурсия).