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/
[3] /boston/2006/03/11/scifi.scm
[4] http://www.amazon.com/exec/obidos/ASIN/0881901180/conmanlaborat-20