FrTime: A Language for Reactive Programs
The frtime.ss language supports declarative construction of reactive systems in a syntax very similar to that of MzScheme. To interact with FrTime, select FrTime from the "Choose Language" menu. You can also make FrTime the language for a module:
(module <module-name> frtime |
<module-body>) |
1 Primitives
stands for an undefined value.
(undefined? val) → boolean? |
val : any/c |
return #t iff val is undefined.
val : any/c |
returns #t iff val is a behavior (a time-varying value whose current value can be projected at any time).
val : any/c |
returns #t iff val is an event (a time-varying stream of values that can occur at arbitrary times).
val : any/c |
returns #t iff val is a signal. (signal? v) is equivalent to (or (behavior? v) (event? v)).
updates approximately once per second with the value of (current-seconds).
updates frequently with the value of (current-inexact-milliseconds).
is an event that never occurs.
2 Defining Custom Input Signals
returns a signal whose values initially track that of init-expr, but that may be rewired to a different signal by set-cell!.
cell : signal? |
val : signal? |
rewires cell (which must have been created by new-cell) to take on the value(s) of val.
(event-receiver) → event? |
returns an event stream that can be triggered imperatively by send-event.
(send-event rcvr val) → void? |
rcvr : event? |
val : any/c |
emits val on rcvr (which must have been created by event-receiver).
3 Signal-Processing Procedures
val : any/c |
projects the current value of a behavior or constant.
val : behavior? |
duration : number? |
delays val by duration milliseconds.
computes a numeric approximation of the integral of val with respect to time (measured in milliseconds).
(derivative val) → behavior? |
val : behavior? |
computes a numeric approximation of the derivative of val with respect to time.
| |||
|
returns an event stream that fires whenever ev fires, whose values are transformed by application of proc.
| |||
|
returns an event stream that passes through only the values from ev for which pred returns #t.
ev : event? |
merges all of the input event sources into a single event source.
ev : event? |
returns an event source that carries only the first occurrence of ev. (The rest are filtered out.)
val : behavior? |
returns an event source that occurs each time the argument behavior changes. The value of the occurrence is the behavior’s new value.
ev : event? |
constructs a behavior that starts out as init and then takes on the last value produced by ev
ev : event? |
returns a behavior that starts as init. Each time ev yields a (potentially time-varying) value, the behavior switches to that value.
ev : event? |
init : any/c |
constructs an event source by accumulating changes (carried by the given event source) over an initial value.
ev : event? |
init : any/c |
combines functionality from accum-e and hold to construct a behavior. (accum-b ev init) is equivalent to (hold init (accum-e ev init)).
ev : event? | ||||||||
init : any/c | ||||||||
|
is similar to accum-e, except the transformer function is fixed and is applied to the event occurrence and the current accumulator (in that order).
ev : event? |
init : any/c |
is similar to collect-e in the same way as accum-b is similar to accum-e.
val : behavior? |
returns an event stream that carries an occurrence each time val changes from #f to anything else.
(lift-strict proc val ) → any |
val : any/c |
provides a mechanism for applying ordinary Scheme primitives to behaviors. If any of the vals are behaviors, returns a behavior whose current value is always equal to (proc (value-now arg) ...). In FrTime, many MzScheme primitives are implicitly lifted.
The following forms allow importation of lifted procedures that aren’t included in the basic FrTime language.
4 Fred: Functional Reactive Wrapper around MrEd
superclass: frame% | ||
|
[label label]
[
[parent parent]
[width width]
[height height]
[x x]
[y y]
[style style]
[enabled enabled]
[border border]
[spacing spacing]
[alignment alignment]
[min-width min-width]
[min-height min-height]
[stretchable-width stretchable-width]
[stretchable-height stretchable-height]
[shown shown]])
width : (or/c (integer-in 0 10000) false/c) = #f
height : (or/c (integer-in 0 10000) false/c) = #f
x : (or/c (integer-in -10000 10000) false/c) = #f
y : (or/c (integer-in -10000 10000) false/c) = #f
style
:
'no-system-menu 'hide-menu-bar
'mdi-parent 'mdi-child
'toolbar-button 'float 'metal))
=
enabled : any/c = #t
border : (integer-in 0 1000) = 0
spacing : (integer-in 0 1000) = 0
alignment
:
(one-of/c 'top 'center 'bottom))
=
'(center top)
min-width : (integer-in 0 10000) = graphical-minimum-width
min-height : (integer-in 0 10000) = graphical-minimum-height
stretchable-width : any/c = #t
stretchable-height : any/c = #t
shown : any/c = #f
The constructor arguments are as in frame%, except that shown label, enabled, stretchable-width, and stretchable-height may be time-varying.
superclass: message% | ||
|
[label label]
[parent parent]
[
[style style]
[font font]
[enabled enabled]
[vert-margin vert-margin]
[horiz-margin horiz-margin]
[min-width min-width]
[min-height min-height]
[stretchable-width stretchable-width]
[stretchable-height stretchable-height]])
→ (is-a?/c ft-message%)
label
:
(or-of/c 'app 'caution 'stop))
parent
:
font : (is-a?/c font%) = (scheme normal-control-font)
vert-margin : (integer-in 0 1000) = 2
horiz-margin : (integer-in 0 1000) = 2
min-width : (integer-in 0 10000) = graphical-minimum-width
min-height : (integer-in 0 10000) = graphical-minimum-height
stretchable-width : any/c = #f
stretchable-height : any/c = #f
The constructor arguments are the same as in message%, except that label, enabled, stretchable-width, and stretchable-height may be time-varying.
superclass: button% | ||
|
[label label]
[parent parent]
[
[style style]
[font font]
[enabled enabled]
[vert-margin vert-margin]
[horiz-margin horiz-margin]
[min-width min-width]
[min-height min-height]
[stretchable-width stretchable-width]
[stretchable-height stretchable-height]])
→ (is-a?/c ft-button%)
parent
:
font : (is-a?/c font%) = (scheme normal-control-font)
enabled : any/c = #t
vert-margin : (integer-in 0 1000) = 2
horiz-margin : (integer-in 0 1000) = 2
min-width : (integer-in 0 10000) = graphical-minimum-width
min-height : (integer-in 0 10000) = graphical-minimum-height
stretchable-width : any/c = #f
stretchable-height : any/c = #f
The constructor arguments are the same as in message%, except that label, enabled, stretchable-width, and stretchable-height may be time-varying.
(send a-ft-button get-value-e) → event?
returns an event stream that yields a value whenever the user clicks the button.