Входит ли список b в список a - Lisp

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

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

Здравствуйте, вечные проблемы с рекурсией, никак не могу ее понять. Помогите, пожалуйста

Реализовать функцию, которая выдает T, в случае если заданный объект obj1 является элементом заданного списка. Например, для объекта obj1=b и списка ’((2) (3) 4 5 b (e r) g) результатом будет T

Решение задачи: «Входит ли список b в список a»

textual
Листинг программы
  1. (defun is-in (lst obj)
  2.   (cond ((member obj lst) t)
  3.         (t (let ((u (mapcar (lambda (x) (is-in x obj)) (remove-if 'atom lst))))
  4.              (if u (apply 'or u) nil)))))
  5.  
  6. (is-in '((2) (3) 4 5 b (e r) g) 'b)
  7.  
  8. ==> T
  9.  
  10. (is-in '((2) (3) 4 5 b (e r) g) 'bb)
  11.  
  12. ==> NIL
  13.  
  14. (is-in '((2) (3) 4 5 ((bb)) (e r) g) 'bb)
  15.  
  16. ==> T

Объяснение кода листинга программы

В данном коде определённая функция is-in проверяет, содержится ли элемент obj в списке lst. Функция использует оператор cond для проверки двух условий:

  1. Если элемент obj уже содержится в списке lst (синтаксис member obj lst), то функция возвращает t (истину).
  2. В противном случае функция применяет оператор mapcar к списку lst, который проходит по каждому элементу списка и применяет к нему функцию is-in obj. Полученный результат сохраняется в переменной u. Затем с помощью оператора if проверяется значение переменной u. Если оно не равно nil, значит, хотя бы один элемент списка содержит obj, и функция возвращает t. В противном случае функция возвращает nil. В приведенном примере кода вызывается функция is-in с двумя аргументами: lst — список ((2) (3) 4 5 b (e r) g) и obj — символ b. Функция возвращает t, так как символ b содержится в списке. Во втором примере кода вызывается функция is-in с тем же списком lst и другим аргументом obj — символом bb. Функция возвращает nil, так как символ bb не содержится в списке. В третьем примере кода вызывается функция is-in с тем же списком lst и другим аргументом obj — списком ((bb)). Функция возвращает t, так как список ((bb)) содержится в списке lst.

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


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

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

7   голосов , оценка 4 из 5

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

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

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