Пересечение списков-множеств - Lisp (229144)
Формулировка задачи:
Здравствуйте, помогите, пожалуйста, решить задачу. Заранее благодарна.
Определите функцию, зависящую от двух аргументов u и v, являющихся списками, которая вычисляет список всех элементов, содержащихся одновременно и в u, и в v. Применить простую рекурсию. язык lisp.
Решение задачи: «Пересечение списков-множеств»
textual
Листинг программы
(defun inters (u v) ;; если u пуст, то пусто и пересечение (cond ((null u) nil) ;; если голова u входит в v, то присоединим голову ;; к рек. вызову нашей функции на хвосте первого аргумента ((member (car u) v) (cons (car u) (inters (cdr u) v))) ;; если голова u не входит в v - то отбросим ее, и вызовем нашей функции ;; на хвосте первого аргумента (t (inters (cdr u) v)))) (trace inters) ==> INTERS (inters '(a b c d e) '(c d e f g)) Вход в функцию inters Аргументы: (A B C D E) (C D E F G) Вход в функцию inters Аргументы: (B C D E) (C D E F G) Вход в функцию inters Аргументы: (C D E) (C D E F G) Вход в функцию inters Аргументы: (D E) (C D E F G) Вход в функцию inters Аргументы: (E) (C D E F G) Вход в функцию inters Аргументы: NIL (C D E F G) Возврат из функции inters Результат: NIL Возврат из функции inters Результат: (E) Возврат из функции inters Результат: (D E) Возврат из функции inters Результат: (C D E) Возврат из функции inters Результат: (C D E) Возврат из функции inters Результат: (C D E) ==> (C D E)
Объяснение кода листинга программы
- Функция
intersпринимает два аргументаuиv. - Если
uпуст, то возвращаетnil. - Если первый элемент
uсодержится вv, то возвращает новый список, где первый элемент - это первый элементu, а остальные элементы - результат вызова функцииintersдля оставшейся частиuиv. - Если первый элемент
uне содержится вv, то возвращает результат вызова функцииintersдля оставшейся частиuиv. - Результатом работы функции
intersдля аргументов(a b c d e)и(c d e f g)будет список(c d e). - Отслеживание вызовов функции
intersпоказывает, что функция вызывается рекурсивно для каждого элемента первого аргумента, пока не будет достигнут конечный результат.