Напишите программу, которая строит СДНФ и СКНФ для заданной булевой формулы. Формула может быть задана прямо в исходном - Lisp

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

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

Напишите программу, которая строит СДНФ и СКНФ для заданной булевой формулы. Формула может быть задана прямо в исходном тексте программы.

Решение задачи: «Напишите программу, которая строит СДНФ и СКНФ для заданной булевой формулы. Формула может быть задана прямо в исходном»

textual
Листинг программы
  1. (define data
  2.   '((-x1 -x2 -x3 #t)
  3.     (-x1 -x2 x3 #t)
  4.     (-x1 x2 -x3 #f)
  5.     (-x1 x2 x3 #t)
  6.     (x1 -x2 -x3 #f)
  7.     (x1 -x2 x3 #f)
  8.     (x1 x2 -x3 #f)
  9.     (x1 x2 x3 #t)))
  10.  
  11. (define (find-diff x y)
  12.   (if (eqv? (length x) (length y))
  13.       (let loop ((x x) (y y) (n 0) (acc '()))
  14.         (cond ((> n 1) #f)
  15.               ((null? x) (reverse acc))
  16.               (else (let ((flag (eq? (first x) (first y))))
  17.                       (loop (rest x)
  18.                             (rest y)
  19.                             (if flag n (add1 n))
  20.                             (if flag (cons (first x) acc) acc))))))
  21.       #f))
  22.  
  23. (define (disjunctive-normal-form table)
  24.   (let ((terms (map (lambda (t) (remove #t t))
  25.                     (filter (lambda (term) (first (reverse term))) table))))
  26.     terms))
  27.  
  28. (disjunctive-normal-form data)

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

В коде представлена реализация функции для построения СДНФ (Disjunctive Normal Form) и СКНФ (Conjunctive Normal Form) для заданной булевой формулы. Булева формула представлена в виде таблицы, где каждая строка соответствует одному выражению, а столбцы соответствуют переменным.

  1. В переменной data хранится таблица с булевой формулой.
  2. Функция find-diff используется для поиска разности между двумя последовательностями.
  3. Функция disjunctive-normal-form принимает таблицу и возвращает список термов в СДНФ.
  4. В функции disjunctive-normal-form используется функция map для удаления значений #t из таблицы.
  5. Затем, с помощью функции filter, из таблицы удаляются строки, содержащие только одно выражение.
  6. Результатом работы функции disjunctive-normal-form является список термов в СДНФ для заданной булевой формулы.
  7. В конце кода вызывается функция disjunctive-normal-form с аргументом data, чтобы получить СДНФ для заданной булевой формулы.

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


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

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

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

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

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

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