From 7462af708b9b00087a4b050e389f4c86efeeb623 Mon Sep 17 00:00:00 2001 From: Sam Caldwell Date: Thu, 13 Jun 2019 08:15:38 -0400 Subject: [PATCH] (during (know P) O ...) for internal knowledge --- racket/syndicate/actor.rkt | 10 +++++++--- racket/syndicate/examples/actor/internal-knowledge.rkt | 7 +++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/racket/syndicate/actor.rkt b/racket/syndicate/actor.rkt index 3a8e147..a5be9f7 100644 --- a/racket/syndicate/actor.rkt +++ b/racket/syndicate/actor.rkt @@ -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) diff --git a/racket/syndicate/examples/actor/internal-knowledge.rkt b/racket/syndicate/examples/actor/internal-knowledge.rkt index 68d3213..cf9436d 100644 --- a/racket/syndicate/examples/actor/internal-knowledge.rkt +++ b/racket/syndicate/examples/actor/internal-knowledge.rkt @@ -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))