Next: Queue, Previous: Pubsub, Up: actor-lib: A standard library of sorts [Contents][Index]
The (goblins actor-lib pushdown)
module provides actors
representing
pushdown automata.
Return a pd-stack
and pd-forwarder
as values
,
which together represent a pushdown automaton. initial-refr, if
provided, is the initial object on the stack.
A pd-stack
has four methods:
push refr
: Add refr to the top of the stack.
spawn-push constructor args ...
: Spawn the actor constructed by
constructor, passing the current top of the stack and the
arguments args to the constructor; then add the new actor to
the top of the stack. Return a reference to the new actor. This
method facilitates implementing the
State design
pattern.
pop
: Return the top of the stack. Calling pop
on an
empty stack is an error.
empty?
: Return #t
if the stack is empty, else #f
.
A pd-forwarder
simply invokes the top actor of the stack with
whatever arguments it is passed.
> (use-modules (goblins actor-lib cell)) ;; enter a vat > (define a-chest (spawn ^cell 'sword)) > (define b-chest (spawn ^cell 'gold)) > (define-values (pd-stack pd-fowarder) (spawn-pushdown-pair a-chest)) > ($ pd-forwarder) => 'sword > ($ pd-stack 'push b-chest) > ($ pd-forwarder 'wand) > ($ b-chest) => 'wand > ($ pd-stack 'spawn-push ^cell) => #<local-object ^cell> > ($ pd-forwarder) => #<local-object ^cell> > ($ ($ pd-forwarder)) => 'wand > ($ pd-stack 'pop) => #<local-object ^cell> > ($ pd-stack 'empty?) => #f