From 5d5d0347e8c4b38dbf6b6a1b7fd0ccb582182cff Mon Sep 17 00:00:00 2001 From: Sergiu Ivanov Date: Sun, 23 Feb 2020 12:19:47 +0100 Subject: [PATCH] networks: Make dynamics inherit from dds and implement dds-step. --- networks-tests.rkt | 9 ++++++++- networks.rkt | 10 ++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/networks-tests.rkt b/networks-tests.rkt index bbedb2f..781cfe9 100644 --- a/networks-tests.rkt +++ b/networks-tests.rkt @@ -107,4 +107,11 @@ (check-equal? (dynamics-network asyn) n) (check-equal? (dynamics-mode asyn) (set (set 'a) (set 'b))) (check-equal? (dynamics-network syn) n) - (check-equal? (dynamics-mode syn) (set (set 'a 'b))))) + (check-equal? (dynamics-mode syn) (set (set 'a 'b)))) + (let* ([n (nn '((a . (not a)) (b . b)))] + [asyn (make-asyn-dynamics n)] + [syn (make-syn-dynamics n)] + [s (st '((a . #t) (b . #f)))]) + (check-equal? (dds-step asyn s) (set (st '((a . #f) (b . #f))) + (st '((a . #t) (b . #f))))) + (check-equal? (dds-step syn s) (set (st '((a . #f) (b . #f))))))) diff --git a/networks.rkt b/networks.rkt index 92e7ff4..dcdb454 100644 --- a/networks.rkt +++ b/networks.rkt @@ -35,7 +35,9 @@ [make-syn (-> (listof variable?) mode?)] [make-dynamics-from-func (-> network? (-> (listof variable?) mode?) dynamics?)] [make-asyn-dynamics (-> network? dynamics?)] - [make-syn-dynamics (-> network? dynamics?)]) + [make-syn-dynamics (-> network? dynamics?)] + [dds-step (-> dynamics? state? (set/c state?))] + ) ;; Predicates (contract-out [variable? (-> any/c boolean?)] [state? (-> any/c boolean?)] @@ -258,7 +260,11 @@ (define mode? (set/c (set/c variable?))) ;;; A network dynamics is a network plus a mode. -(struct dynamics (network mode)) +(struct dynamics (network mode) + #:methods gen:dds + [(define/match (dds-step dyn s) + [((dynamics network mode) s) + (for/set ([m mode]) (update network s m))])]) ;;; Given a list of variables, builds the asynchronous mode (a set of ;;; singletons).