Задача на использование рекурсии - Lisp (229242)
Формулировка задачи:
Описать функцию с использованием рекурсии. Даны списки
list1
иlist2
. Реализовать функцию, которая удаляет изlist1
все элементы-списки, которые соответствуют тому же множеству, что иlist2
. Например: для списков:list1
='(1(2 2 3) 4 (3 2 3) 5),list2
='(3 2 3 2) результатом будет '(1 4 5).Решение задачи: «Задача на использование рекурсии»
textual
Листинг программы
(defun is-equal (lst1 lst2) (if (atom lst1) nil (and (not (remove-if (lambda (x) (member x lst2)) lst1)) (not (remove-if (lambda (x) (member x lst1)) lst2))))) (defun task (lst1 lst2) (cond ((null lst1) nil) ((is-equal (car lst1) lst2) (task (cdr lst1) lst2)) (t (cons (car lst1) (task (cdr lst1) lst2))))) ==> TASK (task '(1 (2 2 3) 4 (3 2 3) 5) '(2 3 3 2)) ==> (1 4 5)
Объяснение кода листинга программы
В коде представлена реализация функции task
, которая выполняет следующие действия:
task
принимает два аргумента:lst1
иlst2
.- Если
lst1
— этоnil
, то функция возвращаетnil
. - Если
is-equal
возвращаетnil
, то функция вызывает себя рекурсивно дляcdr
lst1
иlst2
. - Если
is-equal
возвращает неnil
, то функция возвращаетcons
с первым элементомlst1
и вызовом функцииtask
дляcdr
lst1
иlst2
. Функцияis-equal
проверяет, являются ли два списка равными. Она принимает два аргумента:lst1
иlst2
. Еслиlst1
является атомом, то функция возвращаетnil
. В противном случае она проверяет, содержатся ли все элементыlst1
вlst2
и наоборот. Если это так, то функция возвращаетnil
, иначе возвращаетt
. В данном примере функцияtask
вызывается с двумя списками:lst1
—(1 (2 2 3) 4 (3 2 3) 5)
иlst2
—(2 3 3 2)
. Функцияis-equal
вызывается для проверки равенства двух списков. Первый вызов функцииis-equal
проверяет, является ли первый элементlst1
равнымlst2
. Второй вызов функцииis-equal
проверяет, являются ли два оставшихся элементаlst1
равнымиlst2
. Поскольку оба вызова функцииis-equal
возвращаютnil
, функцияtask
возвращаетcons
с первым элементомlst1
и вызовом функцииtask
для оставшихся элементовlst1
иlst2
. В результате выполнения функцииtask
будет возвращен список(1 4 5)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д