Пересечение списков-множеств - 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)

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

  1. Функция inters принимает два аргумента u и v.
  2. Если u пуст, то возвращает nil.
  3. Если первый элемент u содержится в v, то возвращает новый список, где первый элемент - это первый элемент u, а остальные элементы - результат вызова функции inters для оставшейся части u и v.
  4. Если первый элемент u не содержится в v, то возвращает результат вызова функции inters для оставшейся части u и v.
  5. Результатом работы функции inters для аргументов (a b c d e) и (c d e f g) будет список (c d e).
  6. Отслеживание вызовов функции inters показывает, что функция вызывается рекурсивно для каждого элемента первого аргумента, пока не будет достигнут конечный результат.

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

8   голосов , оценка 3.625 из 5
Похожие ответы