Как установить переменную для указания на ячейку списка?Ссылка на ячейку cons
Я пытаюсь написать макрос, чтобы умножить все значения в списке на значение. Это то, что я в настоящее время:
(defmacro scale (areas scale)
`(dotimes (n (list-length ,areas))
(setf (nth n ,areas) (* (nth n ,areas) ,scale))))
Я беспокоюсь, что это не самый эффективный способ сделать что-то, как я смотрю на п-ю клетку дважды. Я предпочел бы установить переменную, указывающую на n-я ячейка, так что setf
может изменить значение этой ячейки, а *
может использовать значение этой ячейки в своих расчетах.
Еще лучше было бы использовать dolist
и установить эту переменную в ссылку на ячейку. Это вообще возможно?
Пока я здесь, возможно ли получить следующую ячейку в списке, если у вас есть одна ячейка. Вроде как итератор, так что я могу сделать что-то вроде:
(let ((area (car areas))
(loop while area do
(setf area (* area scale))
(setf area (next area))))
Но я не знаю, как он будет проводить различие между установкой указателя или установив значение для ячейки.
я надеюсь, что имеет смысл :)
Спасибо, я знал, что должен быть способ получить следующую ячейку. Он не нажимал, что это будет 'cdr' ячейки, но теперь это имеет смысл. – Lerp
Приятное использование символа-макролета –