Я хочу применить функцию (* x 2) к каждому другому элементу в списке и вернуть весь список, используя цикл . Решение, которое я придумал до сих пор это:Common Lisp - применить функцию к любому другому элементу в списке
(defun double-every-other (xs)
(loop for x in xs by #'cddr collect (* x 2)))
Однако это будет удваиваться каждый элемент и возвращает только те элементы, которые были в два раза, так что, если я выполнил:
(double-every-other '(1 2 3 4))
результат будет выглядеть так:
'(4 8)
Но я хочу, чтобы результат:
'(1 4 3 8)
Есть ли способ, которым я могу это сделать, используя (цикл)?
Не работает для списка с нечетным числом элементов. – Renzo
@Renzo Спасибо, я пропустил это – coredump