Пересечение списков-множеств - 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
показывает, что функция вызывается рекурсивно для каждого элемента первого аргумента, пока не будет достигнут конечный результат.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д