(during (know P) O ...) for internal knowledge

This commit is contained in:
Sam Caldwell 2019-06-13 08:15:38 -04:00
parent e6b733325c
commit 7462af708b
2 changed files with 10 additions and 7 deletions

View File

@ -523,14 +523,18 @@
(define-syntax (during stx)
(syntax-parse stx
[(_ P O ...)
(define E-stx (syntax/loc #'P (asserted P)))
#:literals (know)
[(_ (~or (~and K (know P)) P) O ...)
(define E-stx (quasisyntax/loc #'P #,(if (attribute K)
#'K
#'(asserted P))))
(define R-stx (if (attribute K) #'forget #'retracted))
(define-values (_proj _pat _bindings instantiated)
(analyze-pattern E-stx #'P))
(quasisyntax/loc stx
(on #,E-stx
(let ((p #,instantiated))
(react (stop-when (retracted p))
(react (stop-when (#,R-stx p))
O ...))))]))
(define-syntax (during/spawn stx)

View File

@ -41,10 +41,9 @@ balance = 8
(when (not (negative? new))
(stop-current-facet))))))
(on (know (overdraft))
(printf "know overdraft!\n"))
(on (forget (overdraft))
(printf "no longer in overdraft\n")))
(during (know (overdraft))
(on-start (printf "know overdraft!\n"))
(on-stop (printf "no longer in overdraft\n"))))
(spawn
(on (asserted (balance $v))