Задачи на использование рекурсии - 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)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.385 из 5
Похожие ответы