Реализовать функцию пересечения двух множеств - Lisp

Узнай цену своей работы

Формулировка задачи:

Реализовать функцию пересечения двух множеств.

Решение задачи: «Реализовать функцию пересечения двух множеств»

textual
Листинг программы
(defun intersect (s1 s2)
   (remove-if-not (lambda (x) (member x s2)) s1))
 
==> INTERSECT
 
(intersect '(1 2 3 4 5) '(3 4 5 6))
 
==> (3 4 5)

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

В данном коде определена функция с именем intersect, которая принимает два аргумента типа список (s1 и s2). Функция реализует пересечение двух множеств, то есть возвращает список, содержащий только те элементы, которые присутствуют и в s1, и в s2. Для решения этой задачи используется следующая последовательность шагов:

  1. (remove-if-not (lambda (x) (member x s2)) s1)
    • Функция remove-if-not удаляет из списка s1 все элементы, для которых результат вызова лямбда-функции (x) ложен.
    • Лямбда-функция (x) возвращает истину, если элемент x присутствует в списке s2 (то есть, (member x s2) возвращает истину), и ложь в противном случае.
    • Таким образом, в результате выполнения этого выражения в s1 остаются только те элементы, которые присутствуют и в s2. Ответ: (3 4 5)

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

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