Thanks for the quiz, James - a great one!

I set up a LISPy environment and copied the LISP code as closely as 
possible, using Ruby procs, arrays and strings. Closer than James, even - I 
use setf and let, although I didn't make "defmacro" :) I did, however, 
manage to make the Ruby code "splash bucket wizard" equivalent to 
"splash('bucket', 'wizard')".

Find it here: http://www.dave.burt.id.au/ruby/lisperati.rb

Cheers,
Dave

D:\Docs\ruby>irb
irb(main):001:0> require 'lisperati'
(YOU ARE IN THE LIVING_ROOM OF A WIZARDS HOUSE. THERE IS A WIZARD SNORING 
LOUDLY ON THE COUCH. THERE IS A DOOR GOING WEST FROM HERE. THERE IS A 
STAIRWAY GOING UPSTAIRS FROM HERE. YOU SEE A WHISKEY_BOTTLE ON THE FLOOR. 
YOU SEE A BUCKET ON THE FLOOR.)
=> true
irb(main):002:0> pickup bucket
=> (YOU ARE NOW CARRYING THE BUCKET)
irb(main):003:0> walk west
=> (YOU ARE IN A BEAUTIFUL GARDEN. THERE IS A WELL IN FRONT OF YOU. THERE IS 
A DOOR GOING EAST FROM HERE. YOU SEE A FROG ON THE FLOOR. YOU SEE A CHAIN ON 
THE FLOOR.)
irb(main):004:0> inventory[]
=> (BUCKET)