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

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

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

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

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

textual
Листинг программы
  1. (defun memb! (x y)
  2.   (cond ((null y) nil)
  3.         ((eq x (car y)) t)
  4.         (t (memb! x (cdr y)))))
  5.  
  6. ==> MEMB!
  7.  
  8. (defun union! (x y)
  9.   (cond ((null x) y)
  10.         ((memb! (car x) y) (union (cdr x) y))
  11.         (t (cons (car x) (union! (cdr x) y)))))  
  12.  
  13. ==> UNION!
  14.  
  15. (union! '(1 2 3 4) '(3 4 5 6))
  16.  
  17. ==> (1 2 6 5 4 3)
  18.  
  19. (defun inters! (x y)
  20.   (cond ((null x) nil)
  21.         ((memb! (car x) y) (cons (car x) (inters! (cdr x) y)))
  22.         (t (inters! (cdr x) y))))  
  23.  
  24. ==> INTERS!
  25.  
  26. (inters! '(1 2 3 4 5 6) '(4 5 6 7 8))
  27.  
  28. ==> (4 5 6)
  29.  
  30. (defun diff! (x y)
  31.   (cond ((null x) nil)
  32.         ((memb! (car x) y) (diff! (cdr x) y))
  33.         (t (cons (car x) (diff! (cdr x) y)))))
  34.  
  35. ==> DIFF!
  36.  
  37. (diff! '(1 2 3 4 5) '(3 4 5 6))
  38.  
  39. ==> (1 2)
  40.  
  41. (defun task (m n k p)
  42.   (union! (inters! (diff! m k) n) p))
  43.  
  44. ==> 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут