Операции с множествами - Lisp

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

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

Доброе время суток! Нужно написать одну функцию которая производила такие операции с множествами M,N,K,P: (N ∩ (М – К))V P Без функций member, intersection , union Может кто-то помочь?

Решение задачи: «Операции с множествами»

textual
Листинг программы
(defun memb! (x y)
  (cond ((null y) nil)
        ((eq x (car y)) t)
        (t (memb! x (cdr y))))) 
  
==> MEMB!
 
(defun union! (x y)
  (cond ((null x) y)
        ((memb! (car x) y) (union (cdr x) y))
        (t (cons (car x) (union! (cdr x) y)))))  
 
==> UNION!
 
(union! '(1 2 3 4) '(3 4 5 6))
 
==> (1 2 6 5 4 3)
 
(defun inters! (x y)
  (cond ((null x) nil)
        ((memb! (car x) y) (cons (car x) (inters! (cdr x) y)))
        (t (inters! (cdr x) y))))   
 
==> INTERS!
 
(inters! '(1 2 3 4 5 6) '(4 5 6 7 8))
 
==> (4 5 6)
 
(defun diff! (x y)
  (cond ((null x) nil)
        ((memb! (car x) y) (diff! (cdr x) y))
        (t (cons (car x) (diff! (cdr x) y)))))
 
==> DIFF!
 
(diff! '(1 2 3 4 5) '(3 4 5 6))
 
==> (1 2)
 
(defun task (m n k p)
  (union! (inters! (diff! m k) n) p))
 
==> TASK

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

В коде присутствуют четыре функции: memb!, union!, inters! и diff!. Первые три функции занимаются операциями с множествами: memb! — находит элемент из первого множества (x) в втором (y), union! — объединяет два множества, inters! — находит пересечение двух множеств, diff! — находит разность двух множеств. Функция task вычисляет значение выражения (X ∩ Y) ∪ (Z ∩ Y) − (X ∩ Z), где X, Y и Z — заданные множества, а m, n, k и p — операции над множествами. В данном случае, m и n представлены в виде списков, а k и p — в виде чисел. При вызове функции task с аргументами '(1 2 3 4 5), '(3 4 5 6), 2 и 3, функция сначала находит пересечение множеств (1 2 3 4 5) и (3 4 5 6) (это реализуется с помощью функции inters!), что дает результат (4 5). Затем она объединяет этот результат с множеством (2 3), что дает (4 5 2 3). После этого, она вычисляет разность множеств (1 2 3 4 5) и (3 4 5 6), что дает (1 2). Итоговый результат задачи представлен в виде списка (4 5 2 3 1 2).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

5   голосов , оценка 4.8 из 5