From 183160da6ff99638d33d18f75ca3c51fbe3126a5 Mon Sep 17 00:00:00 2001 From: Sergiu Ivanov Date: Sun, 23 Feb 2020 00:13:36 +0100 Subject: [PATCH] networks: Add make-same-domain-mapping and make-boolean-domain-mapping. --- networks-tests.rkt | 2 ++ networks.rkt | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/networks-tests.rkt b/networks-tests.rkt index 5a8aa7c..a1d4d9b 100644 --- a/networks-tests.rkt +++ b/networks-tests.rkt @@ -72,6 +72,8 @@ ((a . #t) (b . #f)) ((a . #f) (b . #t)) ((a . #f) (b . #f)))) + (check-equal? (hash->list (make-boolean-domain-mapping '(a b))) + '((a . (#f #t)) (b . (#f #t)))) (let ([n #hash((a . (not b)) (b . a))] [doms (make-immutable-hash (for/list ([var '(a b)]) (cons var '(#f #t))))]) diff --git a/networks.rkt b/networks.rkt index 9e4c414..79b2c6c 100644 --- a/networks.rkt +++ b/networks.rkt @@ -25,6 +25,8 @@ [build-interaction-graph (-> network-form? graph?)] [build-all-states (-> (listof (cons/c variable? generic-set?)) (listof state?))] [build-all-states-same-domain (-> (listof variable?) generic-set? (listof state?))] + [make-same-domain-mapping (-> (listof variable?) generic-set? (hash/c variable? generic-set?))] + [make-boolean-domain-mapping (-> (listof variable?) (hash/c variable? (list/c #f #t)))] [get-interaction-sign (-> network-form? (hash/c variable? generic-set?) variable? variable? (or/c '+ '- '0))]) ;; Predicates (contract-out [variable? (-> any/c boolean?)] @@ -159,6 +161,14 @@ (define (build-all-states-same-domain vars domain) (build-all-states (for/list ([v vars]) (cons v domain)))) +;;; Makes a hash set mapping all variables to a single domain. +(define (make-same-domain-mapping vars domain) + (make-immutable-hash (for/list ([var vars]) (cons var domain)))) + +;;; Makes a hash set mapping all variables to the Boolean domain. +(define (make-boolean-domain-mapping vars) + (make-same-domain-mapping vars '(#f #t))) + ;;; Given two interacting variables of a network form and the domains ;;; of the variables, returns '+ if the interaction is monotonously ;;; increasing, '- if it is monotonously decreasing, and '0 otherwise.