Saturday, March 11, 2006
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, the GNU 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 itself is mostly array declarations (and this particular bit of code is a translation from Games Ataris Play—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
LispSchemeguile
.