From b611115f8c8e9d456482e17838c554e17989f90b Mon Sep 17 00:00:00 2001 From: Sergiu Ivanov Date: Thu, 13 Apr 2023 00:19:11 +0200 Subject: [PATCH] Add lists+vars->sbfs/state, lists+headers->sbfs/state, lists->sbfs/state. --- scribblings/tbn.scrbl | 19 +++++++++++++++++++ tbn.rkt | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/scribblings/tbn.scrbl b/scribblings/tbn.scrbl index 5732a09..0a44ee2 100644 --- a/scribblings/tbn.scrbl +++ b/scribblings/tbn.scrbl @@ -155,3 +155,22 @@ variable, starting from 0. @ex[ (lists->tbfs/state '((1 2 3) (1 1 2))) ]} + +@deftogether[(@defproc[(lists+vars->sbfs/state [vars (Listof Variable)] + [lsts (Listof (Listof Real))]) + (Listof TBF/State)] + @defproc[(lists+headers->sbfs/state + [lsts (Pairof (Listof Variable) (Listof (Listof Real)))]) + (Listof TBF/State)] + @defproc[(lists->sbfs/state [lsts (Listof (Listof Real))]) + (Listof TBF/State)])]{ + +Like the corresponding TBF-related functions, but which create SBFs. +In other words, the input lists are treated as lists of weights, and +the thresholds are set to 0. + +@ex[ +(lists+vars->sbfs/state '(x y) '((1 2) (1 1))) +(lists+headers->sbfs/state '((x y) (1 2) (1 1))) +(lists->sbfs/state '((1 2) (1 1))) +]} diff --git a/tbn.rkt b/tbn.rkt index 1e3236f..143181a 100644 --- a/tbn.rkt +++ b/tbn.rkt @@ -26,6 +26,7 @@ sbf/state? apply-tbf/state lists+vars->tbfs/state lists+headers->tbfs/state lists->tbfs/state + lists+vars->sbfs/state lists+headers->sbfs/state lists->sbfs/state ) (: apply-tbf-to-state (-> TBF (State (U Zero One)) (U Zero One))) @@ -118,6 +119,43 @@ (check-equal? (lists->tbfs/state '((1 2 3) (1 1 2))) (list (tbf/state '#hash((x0 . 1) (x1 . 2)) 3) (tbf/state '#hash((x0 . 1) (x1 . 1)) 2))))) + + (: lists+vars->sbfs/state (-> (Listof Variable) (Listof (Listof Real)) + (Listof TBF/State))) + (define (lists+vars->sbfs/state vars lsts) + (for/list ([lst (in-list lsts)]) + (make-tbf/state (map (inst cons Variable Real) vars lst) 0))) + + (module+ test + (test-case "lists+vars->sbfs/state" + (check-equal? (lists+vars->sbfs/state '(x y) '((1 2) (1 1))) + (list (tbf/state '#hash((x . 1) (y . 2)) 0) + (tbf/state '#hash((x . 1) (y . 1)) 0))))) + + (: lists+headers->sbfs/state (-> (Pairof (Listof Variable) (Listof (Listof Real))) + (Listof TBF/State))) + (define (lists+headers->sbfs/state lsts) + (lists+vars->sbfs/state (car lsts) (cdr lsts))) + + (module+ test + (test-case "lists+headers->sbfs/state" + (check-equal? (lists+headers->sbfs/state '((x y) (1 2) (1 1))) + (list (tbf/state '#hash((x . 1) (y . 2)) 0) + (tbf/state '#hash((x . 1) (y . 1)) 0))))) + + (: lists->sbfs/state (-> (Listof (Listof Real)) (Listof TBF/State))) + (define (lists->sbfs/state lsts) + (lists+vars->sbfs/state + (for/list ([i (in-range (length (car lsts)))]) + (string->symbol (format "x~a" i))) + lsts)) + + (module+ test + (test-case "lists->sbfs/state" + (check-equal? (lists->sbfs/state '((1 2) (1 1))) + (list + (tbf/state '#hash((x0 . 1) (x1 . 2)) 0) + (tbf/state '#hash((x0 . 1) (x1 . 1)) 0))))) ) (module+ test