Задачи на использование рекурсии - Lisp
Формулировка задачи:
1) Описать функцию, которая уменьшает все числовые атомы списка на заданное значение, учитывая все атомы подсписков. Например, результатом применения функции к аргументам ’2 ’((a 3 b) a (c d)) (5 (a 8))) должен быть список ’((a 1 b) a (c d)) (3 (a 5))).
2) Реализовать функцию пересечения двух списков, учитывая все атомы всех подсписков обоих списков.
Буду благодарна за любую помощь!
Решение задачи: «Задачи на использование рекурсии»
textual
Листинг программы
(defun decr-num (lst n) (mapcar (lambda (x) (if (atom x) (if (numberp x) (- x n) x) (decr-num x n))) lst)) ==> DECR-NUM (decr-num '(1 2 (a b 3) (((4 5 s) 8))) 3) ==> (-2 -1 (A B 0) (((1 2 S) 5))) (defun inters (lst1 lst2) (labels ((flat (lst) (apply 'append (mapcar (lambda (x) (if (atom x) (list x) (flat x))) lst)))) (let ((s1 (flat lst1)) (s2 (flat lst2))) (remove-if-not (lambda (x) (member x s1)) s2)))) ==> INTERS (inters '(a b (((c d e))) f g) '(((f g) 1 2 (a)))) ==> (F G A)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д