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

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

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

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

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

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

textual
Листинг программы
(defun is-in (lst obj)
  (cond ((member obj lst) t)
        (t (let ((u (mapcar (lambda (x) (is-in x obj)) (remove-if 'atom lst))))
             (if u (apply 'or u) nil)))))
 
(is-in '((2) (3) 4 5 b (e r) g) 'b)
 
==> T
 
(is-in '((2) (3) 4 5 b (e r) g) 'bb)
 
==> NIL
 
(is-in '((2) (3) 4 5 ((bb)) (e r) g) 'bb)
 
==> 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
Похожие ответы