* * * * * 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 Sean Conner at sean@conman.org .