Type apply-tbf-to-state.

This commit is contained in:
Sergiu Ivanov 2023-03-27 23:23:34 +02:00
parent d2e4ab854c
commit fa88c15454
2 changed files with 41 additions and 2 deletions

View file

@ -1,6 +1,7 @@
#lang scribble/manual #lang scribble/manual
@(require scribble/example racket/sandbox @(require scribble/example racket/sandbox
(for-label typed/racket/base (for-label typed/racket/base
(submod "../tbn.rkt" typed)
"../networks.rkt" "../networks.rkt"
"../utils.rkt" "../utils.rkt"
"../functions.rkt" "../functions.rkt"
@ -10,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 '("tbn.rkt")))) (make-evaluator 'typed/racket #:requires '((submod "tbn.rkt" typed)))))
@(define-syntax-rule (ex . args) @(define-syntax-rule (ex . args)
(examples #:eval tbn-evaluator . args)) (examples #:eval tbn-evaluator . args))
@ -23,10 +24,24 @@
@title[#:tag "tbn"]{dds/tbn: Threshold and Sign Boolean Networks (TBN and SBN)} @title[#:tag "tbn"]{dds/tbn: Threshold and Sign Boolean Networks (TBN and SBN)}
@defmodule[dds/tbn] @defmodule[(submod dds/tbn typed)]
This module defines threshold Boolean networks (TBN), as well as sign This module defines threshold Boolean networks (TBN), as well as sign
Boolean networks (SBN). The update functions in such networks are Boolean networks (SBN). The update functions in such networks are
respectively @seclink["tbf" #:doc '(lib respectively @seclink["tbf" #:doc '(lib
"dds/scribblings/dds.scrbl")]{threshold Boolean functions} and sign "dds/scribblings/dds.scrbl")]{threshold Boolean functions} and sign
Boolean functions. Boolean functions.
@defproc[(apply-tbf-to-state [a-tbf TBF] [st (State (U Zero One))])
(U Zero One)]{
Applies a TBF to a state.
The values of the variables of the state are ordered by
@racket[hash-map] and fed to the TBF in order. The number of the
inputs of the TBF must match the number of variables in the state.
@ex[
(require "functions.rkt")
(apply-tbf-to-state (tbf #(1 1) 1) (hash 'x1 0 'x2 1))
]}

24
tbn.rkt
View file

@ -4,6 +4,30 @@
"functions.rkt" "networks.rkt" "functions.rkt" "networks.rkt"
graph racket/random racket/hash) graph racket/random racket/hash)
(module typed typed/racket
(require (except-in "utils.rkt" lists-transpose)
"utils.rkt" "functions.rkt" "networks.rkt"
typed/graph typed/racket/random)
(module+ test
(require typed/rackunit))
(provide
apply-tbf-to-state
)
(: apply-tbf-to-state (-> TBF (State (U Zero One)) (U Zero One)))
(define (apply-tbf-to-state tbf st)
(apply-tbf tbf (list->vector
(hash-map st (λ (_ [val : (U Zero One)]) val) #t))))
(module+ test
(test-case "apply-tbf-to-state"
(define st (hash 'x1 0 'x2 1))
(define f (tbf #(1 1) 1))
(check-equal? (apply-tbf-to-state f st) 0)))
)
(module+ test (module+ test
(require rackunit)) (require rackunit))