From a16b75ba5504c1605fa5638e0cea14a2ab693e16 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Tue, 22 Jul 2014 21:28:17 -0400 Subject: Add signal-switch procedure. * sly/signal.scm (signal-switch): New procedure. --- sly/signal.scm | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/sly/signal.scm b/sly/signal.scm index f8545eb..3e5ce26 100644 --- a/sly/signal.scm +++ b/sly/signal.scm @@ -41,6 +41,7 @@ signal-filter signal-reject signal-drop-repeats + signal-switch signal-constant signal-count signal-tap @@ -258,6 +259,18 @@ testing equivalence." (signal-ref signal) signal)) +(define (signal-switch pred on off) + "Create a new signal whose value is that of the signal ON when the +signal PRED is true, or the value of the signal OFF otherwise." + (define (current-value) + (if (signal-ref pred) + (signal-ref on) + (signal-ref off))) + (make-boxed-signal (current-value) + (lambda (self value) + (%signal-set! self (current-value))) + (list pred))) + (define (signal-constant constant signal) "Create a new signal whose value is always CONSTANT regardless of what the value received from SIGNAL." -- cgit v1.2.3