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

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

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

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

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

textual
Листинг программы
(define data
  '((-x1 -x2 -x3 #t)
    (-x1 -x2 x3 #t)
    (-x1 x2 -x3 #f)
    (-x1 x2 x3 #t)
    (x1 -x2 -x3 #f)
    (x1 -x2 x3 #f)
    (x1 x2 -x3 #f)
    (x1 x2 x3 #t)))
 
(define (find-diff x y)
  (if (eqv? (length x) (length y))
      (let loop ((x x) (y y) (n 0) (acc '()))
        (cond ((> n 1) #f)
              ((null? x) (reverse acc))
              (else (let ((flag (eq? (first x) (first y))))
                      (loop (rest x)
                            (rest y)
                            (if flag n (add1 n))
                            (if flag (cons (first x) acc) acc))))))
      #f))
 
(define (disjunctive-normal-form table)
  (let ((terms (map (lambda (t) (remove #t t))
                    (filter (lambda (term) (first (reverse term))) table))))
    terms))
 
(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
Похожие ответы