9.4.4.3 Building CPS ¶
Unlike Tree-IL, the CPS language is built to be constructed and
deconstructed with abstract macros instead of via procedural
constructors or accessors, or instead of S-expression matching.
Deconstruction and matching is handled adequately by the match
form from (ice-9 match)
. See Pattern Matching. Construction
is handled by a set of mutually builder macros:
build-term
, build-cont
, and build-exp
.
In the following interface definitions, consider term
and
exp
to be built by build-term
or build-exp
,
respectively. Consider any other name to be evaluated as a Scheme
expression. Many of these forms recognize unquote
in some
contexts, to splice in a previously-built value; see the specifications
below for full details.
- Scheme Syntax: build-term ,val ¶
- Scheme Syntax: build-term ($continue k src exp) ¶
- Scheme Syntax: build-exp ,val ¶
- Scheme Syntax: build-exp ($const val) ¶
- Scheme Syntax: build-exp ($prim name) ¶
- Scheme Syntax: build-exp ($fun kentry) ¶
- Scheme Syntax: build-exp ($const-fun kentry) ¶
- Scheme Syntax: build-exp ($code kentry) ¶
- Scheme Syntax: build-exp ($rec names syms funs) ¶
- Scheme Syntax: build-exp ($call proc (arg ...)) ¶
- Scheme Syntax: build-exp ($call proc args) ¶
- Scheme Syntax: build-exp ($callk k proc (arg ...)) ¶
- Scheme Syntax: build-exp ($callk k proc args) ¶
- Scheme Syntax: build-exp ($primcall name param (arg ...)) ¶
- Scheme Syntax: build-exp ($primcall name param args) ¶
- Scheme Syntax: build-exp ($values (arg ...)) ¶
- Scheme Syntax: build-exp ($values args) ¶
- Scheme Syntax: build-exp ($prompt escape? tag handler) ¶
- Scheme Syntax: build-term ($branch kf kt src op param (arg ...)) ¶
- Scheme Syntax: build-term ($branch kf kt src op param args) ¶
- Scheme Syntax: build-term ($switch kf kt* src arg) ¶
- Scheme Syntax: build-term ($throw src op param (arg ...)) ¶
- Scheme Syntax: build-term ($throw src op param args) ¶
- Scheme Syntax: build-term ($prompt k kh src escape? tag) ¶
- Scheme Syntax: build-cont ,val ¶
- Scheme Syntax: build-cont ($kargs (name ...) (sym ...) term) ¶
- Scheme Syntax: build-cont ($kargs names syms term) ¶
- Scheme Syntax: build-cont ($kreceive req rest kargs) ¶
- Scheme Syntax: build-cont ($kfun src meta self ktail kclause) ¶
- Scheme Syntax: build-cont ($kclause ,arity kbody kalt) ¶
- Scheme Syntax: build-cont ($kclause (req opt rest kw aok?) kbody) ¶
Construct a CPS term, expression, or continuation.
There are a few more miscellaneous interfaces as well.
- Scheme Procedure: make-arity req opt rest kw allow-other-keywords? ¶
A procedural constructor for $arity
objects.
- Scheme Syntax: rewrite-term val (pat term) ... ¶
- Scheme Syntax: rewrite-exp val (pat exp) ... ¶
- Scheme Syntax: rewrite-cont val (pat cont) ... ¶
Match val against the series of patterns pat..., using
match
. The body of the matching clause should be a template in
the syntax of build-term
, build-exp
, or build-cont
,
respectively.