Напишите программу, которая строит СДНФ и СКНФ для заданной булевой формулы. Формула может быть задана прямо в исходном - 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) для заданной булевой формулы. Булева формула представлена в виде таблицы, где каждая строка соответствует одному выражению, а столбцы соответствуют переменным.
- В переменной
data
хранится таблица с булевой формулой. - Функция
find-diff
используется для поиска разности между двумя последовательностями. - Функция
disjunctive-normal-form
принимает таблицу и возвращает список термов в СДНФ. - В функции
disjunctive-normal-form
используется функцияmap
для удаления значений#t
из таблицы. - Затем, с помощью функции
filter
, из таблицы удаляются строки, содержащие только одно выражение. - Результатом работы функции
disjunctive-normal-form
является список термов в СДНФ для заданной булевой формулы. - В конце кода вызывается функция
disjunctive-normal-form
с аргументомdata
, чтобы получить СДНФ для заданной булевой формулы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д