Type tbn->lists.
This commit is contained in:
parent
927877b02f
commit
704221185b
2 changed files with 63 additions and 1 deletions
|
@ -499,6 +499,33 @@ set to 0.
|
||||||
(read-org-sbn "((\"-\" \"x\" \"y\") (\"y\" -1 0) (\"x\" 0 -1))")
|
(read-org-sbn "((\"-\" \"x\" \"y\") (\"y\" -1 0) (\"x\" 0 -1))")
|
||||||
]}
|
]}
|
||||||
|
|
||||||
|
@defproc[(tbn->lists [tbn TBN]
|
||||||
|
[#:headers headers Boolean #t]
|
||||||
|
[#:func-names func-names Boolean #t])
|
||||||
|
(Listof (Listof (U Symbol Real)))]{
|
||||||
|
|
||||||
|
Given a @racket[tbn], produces a list of lists of numbers or symbols,
|
||||||
|
containing the description of the functions of the TBN. This list can
|
||||||
|
be read back by @racket[parse-org-tbn], and Org-mode can interpret it
|
||||||
|
as a table.
|
||||||
|
|
||||||
|
Similarly to @racket[parse-org-tbn], if @racket[#:headers] is
|
||||||
|
@racket[#f], this function does not print the names of the inputs of
|
||||||
|
the TBFs. If @racket[#:headers] is @racket[#t], the output starts by
|
||||||
|
a list giving the names of the variables, as well as the symbol
|
||||||
|
@racket['θ] to represent the column giving the thresholds of the TBF.
|
||||||
|
If @racket[#:func-names] is @racket[#t], the first column of the table
|
||||||
|
gives the name of the variable which the corresponding TBF updates.
|
||||||
|
|
||||||
|
If both @racket[#:func-names] and @racket[#:headers] are @racket[#t],
|
||||||
|
the first cell of the first column contains the symbol
|
||||||
|
@racket['-].
|
||||||
|
|
||||||
|
@ex[
|
||||||
|
(tbn->lists (hash 'a (tbf/state (hash 'b 1) 0)
|
||||||
|
'b (tbf/state (hash 'a -1) -1)))
|
||||||
|
]}
|
||||||
|
|
||||||
@section{Miscellaneous utilities}
|
@section{Miscellaneous utilities}
|
||||||
|
|
||||||
@defproc[(group-truth-table-by-nai [tt (Listof (Listof Integer))])
|
@defproc[(group-truth-table-by-nai [tt (Listof (Listof Integer))])
|
||||||
|
|
37
tbn.rkt
37
tbn.rkt
|
@ -48,7 +48,7 @@
|
||||||
|
|
||||||
TBN sbn? tbn->network
|
TBN sbn? tbn->network
|
||||||
build-tbn-state-graph normalized-tbn? normalize-tbn compact-tbn
|
build-tbn-state-graph normalized-tbn? normalize-tbn compact-tbn
|
||||||
parse-org-tbn read-org-tbn read-org-sbn
|
parse-org-tbn read-org-tbn read-org-sbn tbn->lists
|
||||||
)
|
)
|
||||||
|
|
||||||
(: apply-tbf-to-state (-> TBF (State (U Zero One)) (U Zero One)))
|
(: apply-tbf-to-state (-> TBF (State (U Zero One)) (U Zero One)))
|
||||||
|
@ -604,6 +604,41 @@
|
||||||
(tbf/state '#hash((x0 . -1) (x1 . 0)) 0)
|
(tbf/state '#hash((x0 . -1) (x1 . 0)) 0)
|
||||||
'x1
|
'x1
|
||||||
(tbf/state '#hash((x0 . 0) (x1 . -1)) 0)))))
|
(tbf/state '#hash((x0 . 0) (x1 . -1)) 0)))))
|
||||||
|
|
||||||
|
(: tbn->lists (->* (TBN) (#:headers Boolean
|
||||||
|
#:func-names Boolean)
|
||||||
|
(Listof (Listof (U Symbol Real)))))
|
||||||
|
(define (tbn->lists tbn
|
||||||
|
#:headers [headers #t]
|
||||||
|
#:func-names [func-names #t])
|
||||||
|
(define ntbn (normalize-tbn tbn))
|
||||||
|
(define vars-tbfs (hash-map ntbn (λ ([x : Variable] [tbf : TBF/State])
|
||||||
|
(cons x tbf)) #t))
|
||||||
|
(define tbfs (map (inst cdr Variable TBF/State) vars-tbfs))
|
||||||
|
(define tbfs-table ((if headers
|
||||||
|
tbfs/state->lists+headers
|
||||||
|
tbfs/state->lists) tbfs))
|
||||||
|
(cond
|
||||||
|
[(eq? func-names #t)
|
||||||
|
(define vars (map (inst car Variable TBF/State) vars-tbfs))
|
||||||
|
(define col-1 (if headers (cons '- vars) vars))
|
||||||
|
(for/list ([var (in-list col-1)] [row (in-list tbfs-table)])
|
||||||
|
(cons var row))]
|
||||||
|
[else
|
||||||
|
tbfs-table]))
|
||||||
|
|
||||||
|
(module+ test
|
||||||
|
(test-case "tbn->lists"
|
||||||
|
(define tbn (hash 'a (tbf/state (hash 'b 1) 0)
|
||||||
|
'b (tbf/state (hash 'a -1) -1)))
|
||||||
|
(check-equal? (tbn->lists tbn)
|
||||||
|
'((- a b θ) (a 0 1 0) (b -1 0 -1)))
|
||||||
|
(check-equal? (tbn->lists tbn #:headers #f)
|
||||||
|
'((a 0 1 0) (b -1 0 -1)))
|
||||||
|
(check-equal? (tbn->lists tbn #:func-names #f)
|
||||||
|
'((a b θ) (0 1 0) (-1 0 -1)))
|
||||||
|
(check-equal? (tbn->lists tbn #:headers #f #:func-names #f)
|
||||||
|
'((0 1 0) (-1 0 -1)))))
|
||||||
)
|
)
|
||||||
|
|
||||||
(module+ test
|
(module+ test
|
||||||
|
|
Loading…
Reference in a new issue