networks: Add lists->sbfs/state.
This commit is contained in:
parent
943fd322c4
commit
1ff413ddcc
1 changed files with 30 additions and 0 deletions
30
networks.rkt
30
networks.rkt
|
@ -88,6 +88,9 @@
|
||||||
[lists->tbfs/state (->* ((listof (listof (or/c number? symbol?))))
|
[lists->tbfs/state (->* ((listof (listof (or/c number? symbol?))))
|
||||||
(#:headers boolean?)
|
(#:headers boolean?)
|
||||||
(listof tbf/state?))]
|
(listof tbf/state?))]
|
||||||
|
[lists->sbfs/state (->* ((listof (listof (or/c number? symbol?))))
|
||||||
|
(#:headers boolean?)
|
||||||
|
(listof sbf/state?))]
|
||||||
[read-org-tbfs/state (->* (string?) (#:headers boolean?) (listof tbf/state?))]
|
[read-org-tbfs/state (->* (string?) (#:headers boolean?) (listof tbf/state?))]
|
||||||
[print-org-tbfs/state (->* ((non-empty-listof tbf/state?)) (#:headers boolean?)
|
[print-org-tbfs/state (->* ((non-empty-listof tbf/state?)) (#:headers boolean?)
|
||||||
(listof (listof (or/c number? symbol?))))]
|
(listof (listof (or/c number? symbol?))))]
|
||||||
|
@ -1054,6 +1057,33 @@
|
||||||
(tbf/state '#hash((a . 1) (b . 2)) 3)
|
(tbf/state '#hash((a . 1) (b . 2)) 3)
|
||||||
(tbf/state '#hash((a . 1) (b . 1)) 2)))))
|
(tbf/state '#hash((a . 1) (b . 1)) 2)))))
|
||||||
|
|
||||||
|
;;; Like lists->tbfs/state, but does not expect thresholds in the
|
||||||
|
;;; input.
|
||||||
|
;;;
|
||||||
|
;;; Every lists in the list contains the weights of the SBF. If
|
||||||
|
;;; headers is #t, the names of the variables to appear as the inputs
|
||||||
|
;;; of the TBF are taken from the first list.
|
||||||
|
;;;
|
||||||
|
;;; If headers is #f, the names of the variables are generated as xi,
|
||||||
|
;;; where i is the index of the variable.
|
||||||
|
(define (lists->sbfs/state lsts #:headers [headers #t])
|
||||||
|
(define rows (if headers (cdr lsts) lsts))
|
||||||
|
(define rows-θ (for/list ([lst (in-list rows)]) (append lst '(0))))
|
||||||
|
(lists->tbfs/state (if headers (cons (car lsts) rows-θ) rows-θ)
|
||||||
|
#:headers headers))
|
||||||
|
|
||||||
|
(module+ test
|
||||||
|
(test-case "lists->sbfs/state"
|
||||||
|
(define tbfs '((1 2) (1 -1)))
|
||||||
|
(check-equal? (lists->sbfs/state tbfs #:headers #f)
|
||||||
|
(list
|
||||||
|
(tbf/state '#hash((x0 . 1) (x1 . 2)) 0)
|
||||||
|
(tbf/state '#hash((x0 . 1) (x1 . -1)) 0)))
|
||||||
|
(check-equal? (lists->sbfs/state (cons '(a b) tbfs) #:headers #t)
|
||||||
|
(list
|
||||||
|
(tbf/state '#hash((a . 1) (b . 2)) 0)
|
||||||
|
(tbf/state '#hash((a . 1) (b . -1)) 0)))))
|
||||||
|
|
||||||
;;; Reads a list of tbf/state from an Org-mode string containing a
|
;;; Reads a list of tbf/state from an Org-mode string containing a
|
||||||
;;; sexp, containing a list of lists of numbers. As in
|
;;; sexp, containing a list of lists of numbers. As in
|
||||||
;;; lists->tbfs/state, the last element of each list is taken to be
|
;;; lists->tbfs/state, the last element of each list is taken to be
|
||||||
|
|
Loading…
Reference in a new issue