Напишите функцию, аналогичную встроенной функции замены subst в спи-ске s взаимную замену x на y - Lisp
Формулировка задачи:
Напишите функцию, аналогичную встроенной функции замены subst в списке s выражения x на y, но производящую взаимную замену x на y, т.е. x->y, y->x.
Решение задачи: «Напишите функцию, аналогичную встроенной функции замены subst в спи-ске s взаимную замену x на y»
textual
Листинг программы
(defun task(lst x y) (mapcar (lambda (a) (cond ((eq x a) y) ((eq y a) x) ((listp a) (task a x y)) (t a))) lst))
Объяснение кода листинга программы
В данном коде реализована функция task, которая выполняет аналогичную замене subst функцию в списке lst.
Пример использования функции:
(task '(a b c) 'x 'y)
Вывод:
(a b c)
В данном коде:
- Создается функция
taskс тремя аргументамиlst,xиy. - Функция
mapcarиспользуется для применения анонимной функции к каждому элементу спискаlst. - Анонимная функция проверяет каждый элемент списка
lstна равенствоx. Если элемент равенx, он заменяется наy. - Если элемент равен
y, он заменяется наx. - Если элемент является списком, рекурсивно вызывается функция
taskдля этого элемента. - Если элемент не является списком, он остается неизменным.
- Результатом является новый список, в котором выполняется замена
xнаy.