From 25a88c820ad13cea3f8e7f5da1f6095960b386b6 Mon Sep 17 00:00:00 2001 From: Sergiu Ivanov Date: Sat, 22 Feb 2020 22:41:56 +0100 Subject: [PATCH] networks: Add build-all-states-same-domain. --- networks-tests.rkt | 7 ++++++- networks.rkt | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) 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))))