Rudy’s OBTF Rudolf Adamkovič

Home / Computer science / SAT solver / Practice implementation: Emacs Lisp


Arc consistency: Creating queue

AC3 queue of variable-clause pairs

(defun my-sat-queue (clauses)
  "Return a list of all variable-clause pairs in CLAUSES."
  (mapcan (lambda (clause)
            (mapcar (lambda (literal)
                      (let ((variable (abs literal)))
                        (cons variable clause)))
                    clause))
          clauses))
(ert-deftest my-sat-queue ()
  (should (equal (my-sat-queue '((1 2) (2 3)))
                 '((1 . (1 2))
                   (2 . (1 2))
                   (2 . (2 3))
                   (3 . (2 3))))))

(ert-deftest my-sat-queue/negated-literals ()
  (should (equal (my-sat-queue '((1 -2 3)))
                 '((1 . (1 -2 3))
                   (2 . (1 -2 3))
                   (3 . (1 -2 3))))))

© 2025 Rudolf Adamkovič under GNU General Public License version 3.
Made with Emacs and secret alien technologies of yesteryear.