Замена всех вхождений заданного значения другим в списке - Lisp
Формулировка задачи:
Нужно решить задачу
Определите функцию, заменяющую в исходном списке все вхождения заданного значения другим.
Как это сделать?
Решение задачи: «Замена всех вхождений заданного значения другим в списке»
textual
Листинг программы
(defun rep (lst w r) (let ((res nil)) (iter (for x in lst) (cond ((equal x w) (collecting r into res)) ((listp x) (collecting (rep x w r) into res)) (t (collecting x into res))))))
Объяснение кода листинга программы
В коде определена функция rep с тремя аргументами: lst, w и r.
lst- это список, в котором нужно выполнить замену.w- это значение, которое нужно заменить.r- это значение, на которое нужно заменить. Функция использует циклiter, чтобы пройти по всем элементам спискаlst. Для каждого элементаxвыполняется проверка:- Если
xравноw(то есть мы нашли совпадение), то в текущий результатresдобавляется значениеr. - Если
xявляется списком, то рекурсивно вызывается функцияrepдля этого элемента, с аргументамиwиr, и результат добавляется вres. - Если
xне является списком или не равноw, то его значение просто добавляется вres. В итоге, после прохода по всем элементам списка, вresбудет содержаться результат замены.