FWIW Kawa has its own picture language.
Its procedures are functional, like SICP, in that
the results are abstract side-effect-free "picture values"
that can be combined using transformations, composition, etc.
SICP combines the concepts of (affine) transformation and bounding box
into a single concept of a "frame", The Kawa picture model separates
bounding box and transformation in a way that I believe is more
flexible and more in tune with modern 2D APIs.
https://www.gnu.org/software/kawa/tutorial/Pictures.html (introduction, incomplete tutorial)
https://www.gnu.org/software/kawa/Composable-pictures.html (reference)
Note the examples show picture-valued expressions being evaluated
and printed by the Kawa REPL, using the DomTerm terminal emulator.
For example (draw (circle 30)) is not a command to draw a circle.
Instead it creates a picture of a (non-filled) circle that may be
printed or further transformed. The Kawa REPL when running under
DomTerm then renders the resulting picture value as SVG.
--
--Per Bothner
xxxxxx@bothner.com http://per.bothner.com/