I can't seem to find this email cached on the google group.

Can anyone else?

On Sun, May 31, 2009 at 9:11 AM, Eduardo Cavazos<[email protected]> wrote:
> Hello,
>
> As some of you know, one of my projects is an implementation of
> Context Free Art in Scheme. It was a part of Abstracting and has been
> ported to Agave.
>
> The only part of the task that I'd tackled was a core engine which would
> interpret low-level state machine instructions and a way to render the
> results of this interpretation. The Scheme versions of the CFDG programs
> were thus much longer; the flow control of the program was explicit,
> whereas most of this is implicit in the CFDG language.
>
> I always knew there were a couple of ways to proceed on this project.
>
> One is to use one of the available parsing systems for Scheme to specify
> the actual CFDG language grammar and use the parser as a front end to
> the low-level system I'd set up.
>
> The other, to "embed" the language within Scheme with the help of
> higher-order procedures and macros.
>
> Recently I decided to work on the latter method and the results are
> quite surprising!
>
> Here's an actual CFDG program:
>
> http://www.contextfreeart.org/gallery/view.php?id=541
>
> Here's the Scheme version written in the low-level style:
>
> http://github.com/dharmatech/agave/raw/982a3afc2ff3eb3acfc67a071bcab1f96e6a7446/demos/chiaroscuro.scm
>
> I created a macro called 'rule'. Here's the same program in terms of it:
>
> http://github.com/dharmatech/agave/raw/master/demos/cfdg-chiaroscuro.scm
>
> Much closer to the original!
>
> Let's zero in on a part of this example. Here's how the 'BLACK' rule is
> defined in the CFDG language:
>
> ----------------------------------------------------------------------
> rule BLACK 60 {
>    CIRCLE {s .6}
>    BLACK {x .1 r 5 s .99 b -.01 a -.01}
> }
> rule BLACK {
>    WHITE {}
>    BLACK {}
> }
> ----------------------------------------------------------------------
>
> Here is what it looks like in Scheme:
>
> (rule black
>
>      (60 (circle (s 0.6))
>          (black (x 0.1) (r 5) (s 0.99) (b -0.01) (a -0.01)))
>
>      (1  (white)
>          (black)))
>
> Notice there's a '1' in the Scheme version but not in the CFDG version.
> That number indicates the 'weight' of the branch and is implicitly '1'
> if you don't specify it in CFDG. I chose to make this explicit for now.
>
> 'rule' is a simple 'syntax-rules' macro:
>
>    http://github.com/dharmatech/agave/raw/master/demos/cfdg-rule.sls
>
> The core library '(cfdg)' is only 268 lines.
>
> I chose to implement not the complete CFDG language, but a subset which
> I found to be sort of a "sweet spot"; enough features to render the
> really cool examples I'd seen.
>
> Does the fact that CFDG was so straightforward to embed and implement
> mean that the designers of that language did a great job of coming up
> with something truely small and elegant? Or is it a testament to the
> power of Scheme? I think it is both. :-)
>
> Agave includes a few CFDG demos. Each of these will kick one off:
>
>    ikarus --r6rs-script ~/agave/demos/cfdg-spirales.scm
>    ikarus --r6rs-script ~/agave/demos/cfdg-chiaroscuro.scm
>    ikarus --r6rs-script ~/agave/demos/cfdg-game1-turn6.scm
>
> As usual, they all run under Ypsilon as well.
>
> I think the earliest piece of software which influenced me to think
> along the lines which led to design choices in this project is Scsh. In
> particular it's embedding of process forms, the 'awk' macro, and SREs.
> So thanks to Olin Shivers for leading the way. :-)
>
> Ed
>
>
>



-- 
http://www.wisdomandwonder.com/

Reply via email to