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

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

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

Код к задаче: «Напишите программу, которая строит СДНФ и СКНФ для заданной булевой формулы. Формула может быть задана прямо в исходном - 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)
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.

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


СДЕЛАЙТЕ РЕПОСТ