Однократная замена выражения x на y в списке l - Lisp
Формулировка задачи:
Написать рекурсивную функцию, заменяющую в списке l первое вхождение x на y. Список задать при вызове функции.
Решение задачи: «Однократная замена выражения x на y в списке l»
textual
Листинг программы
(defun change (w a b) (when w (if (equalp (car w) a) (cons b (cdr w)) (cons (car w) (change (cdr w) a b))))) > (change '(1 2 3 1 2) 2 20) (1 20 3 1 2
Объяснение кода листинга программы
В коде определён функцией change с тремя аргументами w, a, b.
Если w не равно nil, то выполняется следующая последовательность действий:
- Если первый элемент
wравенa, то возвращается новая список, в котором этот элемент заменён наb. - Если первый элемент
wне равенa, то рекурсивно вызывается функцияchangeсcdr wиa,bв качестве аргументов. - Если
wравноnil, то возвращаетсяnil. Меняем 2-й элемент списка '(1 2 3 1 2) на 20, получаем '(1 20 3 1 2).