Реализовать функцию пересечения двух множеств - 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. Для решения этой задачи используется следующая последовательность шагов:
- (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)