Задачи на использование рекурсии - Lisp

Узнай цену своей работы

Формулировка задачи:

1) Описать функцию, которая уменьшает все числовые атомы списка на заданное значение, учитывая все атомы подсписков. Например, результатом применения функции к аргументам ’2 ’((a 3 b) a (c d)) (5 (a 8))) должен быть список ’((a 1 b) a (c d)) (3 (a 5))). 2) Реализовать функцию пересечения двух списков, учитывая все атомы всех подсписков обоих списков. Буду благодарна за любую помощь!

Решение задачи: «Задачи на использование рекурсии»

textual
Листинг программы
  1. (defun decr-num (lst n)
  2.   (mapcar (lambda (x) (if (atom x) (if (numberp x) (- x n) x) (decr-num x n))) lst))
  3.  
  4. ==> DECR-NUM
  5.  
  6. (decr-num '(1 2 (a b 3) (((4 5 s) 8))) 3)
  7.  
  8. ==> (-2 -1 (A B 0) (((1 2 S) 5)))
  9.  
  10. (defun inters (lst1 lst2)
  11.   (labels ((flat (lst) (apply 'append (mapcar (lambda (x) (if (atom x) (list x) (flat x))) lst))))
  12.     (let ((s1 (flat lst1))
  13.           (s2 (flat lst2)))
  14.       (remove-if-not (lambda (x) (member x s1)) s2))))
  15.  
  16. ==> INTERS
  17.  
  18. (inters '(a b (((c d e))) f g) '(((f g) 1 2 (a))))
  19.  
  20. ==> (F G A)

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


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

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

13   голосов , оценка 4.385 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы