diff --git a/networks-tests.rkt b/networks-tests.rkt index 7202416..2dc48cd 100644 --- a/networks-tests.rkt +++ b/networks-tests.rkt @@ -66,4 +66,9 @@ ((a . #t) (b . 3)) ((a . #f) (b . 1)) ((a . #f) (b . 2)) - ((a . #f) (b . 3))))) + ((a . #f) (b . 3)))) + (check-equal? (map hash->list (build-all-states-same-domain '(a b) '(#t #f))) + '(((a . #t) (b . #t)) + ((a . #t) (b . #f)) + ((a . #f) (b . #t)) + ((a . #f) (b . #f))))) diff --git a/networks.rkt b/networks.rkt index 87761bc..500cdc5 100644 --- a/networks.rkt +++ b/networks.rkt @@ -23,7 +23,8 @@ network?)] [list-interactions (-> network-form? variable? (listof variable?))] [build-interaction-graph (-> network-form? graph?)] - [build-all-states (-> (listof (cons/c variable? generic-set?)) (listof state?))]) + [build-all-states (-> (listof (cons/c variable? generic-set?)) (listof state?))] + [build-all-states-same-domain (-> (listof variable?) generic-set? (listof state?))]) ;; Predicates (contract-out [variable? (-> any/c boolean?)] [state? (-> any/c boolean?)] @@ -151,3 +152,8 @@ (for/list ([s (apply cartesian-product domains)]) (make-state (for/list ([var vars] [val s]) (cons var val)))))) + +;;; Given a list of variables and a domain common to all of them, +;;; builds the list of all possible states. +(define (build-all-states-same-domain vars domain) + (build-all-states (for/list ([v vars]) (cons v domain))))