Задача на использование рекурсии - 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
Листинг программы
  1. (defun is-equal (lst1 lst2)
  2.   (if (atom lst1) nil  
  3.       (and (not (remove-if (lambda (x) (member x lst2)) lst1))
  4.            (not (remove-if (lambda (x) (member x lst1)) lst2)))))
  5.    
  6. (defun task (lst1 lst2)
  7.    (cond ((null lst1) nil)
  8.          ((is-equal (car lst1) lst2) (task (cdr lst1) lst2))
  9.          (t (cons (car lst1) (task (cdr lst1) lst2)))))
  10.  
  11. ==> TASK
  12.  
  13. (task '(1 (2 2 3) 4 (3 2 3) 5) '(2 3 3 2))
  14.  
  15. ==> (1 4 5)

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

В коде представлена реализация функции task, которая выполняет следующие действия:

  1. task принимает два аргумента: lst1 и lst2.
  2. Если lst1 — это nil, то функция возвращает nil.
  3. Если is-equal возвращает nil, то функция вызывает себя рекурсивно для cdr lst1 и lst2.
  4. Если 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).

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


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

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

9   голосов , оценка 3.778 из 5

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

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

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