Type network and add examples.
This commit is contained in:
parent
8067f9e7f0
commit
883e845d9d
2 changed files with 40 additions and 12 deletions
21
networks.rkt
21
networks.rkt
|
@ -4,16 +4,24 @@
|
||||||
(require "utils.rkt" "functions.rkt"
|
(require "utils.rkt" "functions.rkt"
|
||||||
typed/graph racket/random)
|
typed/graph racket/random)
|
||||||
|
|
||||||
|
(module+ test
|
||||||
|
(require typed/rackunit))
|
||||||
|
|
||||||
(provide
|
(provide
|
||||||
State UpdateFunction DomainMapping)
|
State UpdateFunction DomainMapping
|
||||||
|
(struct-out network) Network)
|
||||||
|
|
||||||
(define-type (State a) (VariableMapping a))
|
(define-type (State a) (VariableMapping a))
|
||||||
(define-type (UpdateFunction a) (-> (State a) a))
|
(define-type (UpdateFunction a) (-> (State a) a))
|
||||||
(define-type (DomainMapping a) (VariableMapping (Listof a)))
|
(define-type (DomainMapping a) (VariableMapping (Listof a)))
|
||||||
|
|
||||||
|
(struct (a) network ([functions : (VariableMapping (UpdateFunction a))]
|
||||||
|
[domains : (DomainMapping a)])
|
||||||
|
#:transparent
|
||||||
|
#:type-name Network)
|
||||||
)
|
)
|
||||||
|
|
||||||
(require 'typed)
|
(require 'typed)
|
||||||
(provide)
|
|
||||||
|
|
||||||
|
|
||||||
(require (except-in "utils.rkt" lists-transpose) (submod "utils.rkt" untyped)
|
(require (except-in "utils.rkt" lists-transpose) (submod "utils.rkt" untyped)
|
||||||
|
@ -183,15 +191,6 @@
|
||||||
;;; values in their domains.
|
;;; values in their domains.
|
||||||
(define domain-mapping/c (hash/c variable? list?))
|
(define domain-mapping/c (hash/c variable? list?))
|
||||||
|
|
||||||
;;; A network consists of a mapping from its variables to its update
|
|
||||||
;;; variables, as a well as of a mapping from its variables to
|
|
||||||
;;; their domains.
|
|
||||||
;;;
|
|
||||||
;;; The domain mapping does not have to assign domains to all
|
|
||||||
;;; variables (e.g., it may be empty), but in this case the functions
|
|
||||||
;;; which need to know the domains will not work.
|
|
||||||
(struct network (functions domains) #:transparent)
|
|
||||||
|
|
||||||
;;; Builds a network from a given hash table assigning functions to
|
;;; Builds a network from a given hash table assigning functions to
|
||||||
;;; variables by attributing Boolean domains to every variable.
|
;;; variables by attributing Boolean domains to every variable.
|
||||||
(define (make-boolean-network funcs)
|
(define (make-boolean-network funcs)
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
(parameterize ([sandbox-output 'string]
|
(parameterize ([sandbox-output 'string]
|
||||||
[sandbox-error-output 'string]
|
[sandbox-error-output 'string]
|
||||||
[sandbox-memory-limit 50])
|
[sandbox-memory-limit 50])
|
||||||
(make-evaluator 'typed/racket #:requires '("networks.rkt"))))
|
(make-evaluator 'typed/racket #:requires '((submod "networks.rkt" typed)))))
|
||||||
|
|
||||||
@(define-syntax-rule (ex . args)
|
@(define-syntax-rule (ex . args)
|
||||||
(examples #:eval networks-evaluator . args))
|
(examples #:eval networks-evaluator . args))
|
||||||
|
@ -48,6 +48,35 @@ their domains.
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@defstruct*[network ([functions (VariableMapping (UpdateFunction a))]
|
||||||
|
[domains (DomainMapping a)])]{
|
||||||
|
|
||||||
|
A network consists of a mapping from its variables to its update variables, as
|
||||||
|
a well as of a mapping from its variables to their domains.
|
||||||
|
|
||||||
|
Instances of @racket[network] have the type @racket[Network].
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@defidform[#:kind "type" Network]{
|
||||||
|
|
||||||
|
The type of the instances of @racket[Network].
|
||||||
|
|
||||||
|
@ex[
|
||||||
|
(: or-func (UpdateFunction Boolean))
|
||||||
|
(define (or-func s)
|
||||||
|
(or (hash-ref s 'a) (hash-ref s 'b)))
|
||||||
|
|
||||||
|
(: and-func (UpdateFunction Boolean))
|
||||||
|
(define (and-func s)
|
||||||
|
(and (hash-ref s 'a) (hash-ref s 'b)))
|
||||||
|
|
||||||
|
(network (hash 'a or-func
|
||||||
|
'b and-func)
|
||||||
|
(hash 'a '(#f #t)
|
||||||
|
'b '(#f #t)))
|
||||||
|
]}
|
||||||
|
|
||||||
@section{Syntactic description of networks}
|
@section{Syntactic description of networks}
|
||||||
|
|
||||||
@section{Inferring interaction graphs}
|
@section{Inferring interaction graphs}
|
||||||
|
|
Loading…
Reference in a new issue