summaryrefslogtreecommitdiff
path: root/guile/sat/helpers.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guile/sat/helpers.scm')
-rw-r--r--guile/sat/helpers.scm19
1 files changed, 19 insertions, 0 deletions
diff --git a/guile/sat/helpers.scm b/guile/sat/helpers.scm
new file mode 100644
index 0000000..6729382
--- /dev/null
+++ b/guile/sat/helpers.scm
@@ -0,0 +1,19 @@
+(define-module (sat helpers)
+ #:use-module (sat solver)
+ #:use-module (srfi srfi-1)
+ #:export (exactly-one-true))
+
+(define (exactly-one-true v)
+
+ ;; At least one of 'v' must be true
+ (add-clause v)
+
+ ;; At least one of each pair in 'v' must be false
+ (pair-for-each
+ (lambda (v1p)
+ (for-each
+ (lambda (v2)
+ (add-clause (list (- (car v1p)) (- v2))))
+ (cdr v1p)))
+ v))
+