* * * * *
Generative text in guile
I'm amazed at how quickly I was able to cobble up a generative text program
in Lisp. Well, Scheme. Technically guile [1], the GNU (GNU's Not Unix) [2]
version of Scheme. I didn't bother with parsing the existing datafiles—
instead I did the “arrays of strings and a slew of code (actually, very
little) to sling the pieces together, but it was darned near trivial. The
entire program, sans array declarations, comes down to:
> (define rndstate 0)
> (define refn array-ref) ;; return an element from an array
>
> (define (main args)
> (set! rndstate (seed->random-state (current-time)))
> (display (racter))
> (display "\n\n")
> (exit 0)
> )
>
>
> ;; return the size of an array
> (define (nref a) (car (array-dimensions a)))
>
> ;; return a random element from an array
> (define (ref a) (array-ref a (random (nref a) rndstate)))
>
> ;; sling those strings
> (define (racter)
> (eval (cons 'string-append (array->list (ref default-template)))
> (interaction-environment)
> )
> )
>
The code [3] itself is mostly array declarations (and this particular bit of
code is a translation from _Games Ataris Play_ [4]—hey, it was a couple of
bucks from a used book store) with this bit of code at the bottom.
There are some features I want to add to this, but they shouldn't take all
that much code. Once I get this working how I want it, it should be pretty
straightforward to convert the existing datafiles I have into [DELETED-Lisp-
DELETED][DELETED-Scheme-DELETED]guile.
[1]
http://www.gnu.org/software/guile/
[2]
http://www.gnu.org/
[3]
gopher://gopher.conman.org/0Phlog:2006/03/11/scifi.scm
[4]
http://www.amazon.com/exec/obidos/ASIN/0881901180/conmanlaborat-20
Email author at
[email protected]