------_ extPart_001_01C5CA05.F67C280A Content-Type: text/plain; charset s-ascii" Content-Transfer-Encoding: quoted-printable I'm always sending the wrong files. This is the bit that actually implements the quiz (ie. lets you play the game), as opposed to the last one which just played with itself and made sure it got the right output. -----Original Message----- From: Daniel Sheppard Sent: Wednesday, 5 October 2005 6:23 PM To: ruby-talk ML Subject: [SOLUTION] Lisp Game (#49) This was an interesting one. I started out trying to do a fairly word-for-word translation to ruby, and then started on a loose translation after I hit the defmacro stuff. Then I thought, screw that. Why not parse LISP? I think ended up getting a much better understanding of all the bits that the casting SPELS article glossed over. Herein, an extremely inelegant, and potentially severely broken lisp processor. It allows you to write code like the following: require 'lisp' class Monkey include Lisp include Lisp::StandardFunctions def boogers "Monkeys!!" end end x = Monkey.new x.lisp "(setf *something* 'value)" x.lisp "(defun saysomething () *something*)" x.saysomething() => "value" x.lisp "(saysomething)" => "value" x.lisp "(boogers)" => "Monkeys!!" ######################################################################## ############# This email has been scanned by MailMarshal, an email content filter. ######################################################################## ############# ##################################################################################### This email has been scanned by MailMarshal, an email content filter. ##################################################################################### ------_ extPart_001_01C5CA05.F67C280A Content-Type: application/octet-stream; name uiz_49b_lisp.rb" Content-Transfer-Encoding: base64 Content-Description: quiz_49b_lisp.rb Content-Disposition: attachment; filename uiz_49b_lisp.rb" cmVxdWlyZSAnbGlzcCcNCg0KbGlzcCA9IE9iamVjdC5uZXcNCmxpc3AuZXh0ZW5kKExpc3ApDQps aXNwLmV4dGVuZChMaXNwOjpTdGFuZGFyZEZ1bmN0aW9ucykNCg0KbGlzcC5saXNwKDw8LUVPRikN CihkZWZwYXJhbWV0ZXIgdHBsOipwcmludC1sZW5ndGgqIG5pbCkNCg0KKGRlZnBhcmFtZXRlciAq b2JqZWN0cyogJyh3aGlza2V5LWJvdHRsZSBidWNrZXQgZnJvZyBjaGFpbikpDQoNCihkZWZwYXJh bWV0ZXIgKm1hcCogJygobGl2aW5nLXJvb20gKHlvdSBhcmUgaW4gdGhlIGxpdmluZy1yb29tIG9m IGEgd2l6YXJkJ3MgaG91c2UuIHRoZXJlIGlzIGEgd2l6YXJkIHNub3JpbmcgbG91ZGx5IG9uIHRo ZSBjb3VjaC4pDQogICAgICAgICAgICAgICAgICAgICAod2VzdCBkb29yIGdhcmRlbikgIA0KICAg ICAgICAgICAgICAgICAgICAgKHVwc3RhaXJzIHN0YWlyd2F5IGF0dGljKSkNCiAgICAgICAgICAg ICAgKGdhcmRlbiAoeW91IGFyZSBpbiBhIGJlYXV0aWZ1bCBnYXJkZW4uIHRoZXJlIGlzIGEgd2Vs bCBpbiBmcm9udCBvZiB5b3UuKQ0KICAgICAgICAgICAgICAgICAgICAgIChlYXN0IGRvb3IgbGl2 aW5nLXJvb20pKQ0KICAgICAgICAgICAgICAoYXR0aWMgKHlvdSBhcmUgaW4gdGhlIGF0dGljIG9m IHRoZSBhYmFuZG9uZWQgaG91c2UuIHRoZXJlIGlzIGEgZ2lhbnQgd2VsZGluZyB0b3JjaCBpbiB0 aGUgY29ybmVyLikNCiAgICAgICAgICAgICAgICAgICAgIChkb3duc3RhaXJzIHN0YWlyd2F5IGxp dmluZy1yb29tKSkpKQ0KDQooZGVmcGFyYW1ldGVyICpvYmplY3QtbG9jYXRpb25zKiAnKCh3aGlz a2V5LWJvdHRsZSBsaXZpbmctcm9vbSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWNr ZXQgbGl2aW5nLXJvb20pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhaW4gZ2FyZGVu KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyb2cgZ2FyZGVuKSkpDQoNCihkZWZwYXJh bWV0ZXIgKmxvY2F0aW9uKiAnbGl2aW5nLXJvb20pDQoNCihkZWZ1biBkZXNjcmliZS1sb2NhdGlv biAobG9jYXRpb24gbWFwKQ0KICAoc2Vjb25kIChhc3NvYyBsb2NhdGlvbiBtYXApKSkNCg0KKGRl ZnVuIGRlc2NyaWJlLXBhdGggKHBhdGgpDQogIGAodGhlcmUgaXMgYSAsKHNlY29uZCBwYXRoKSBn b2luZyAsKGZpcnN0IHBhdGgpIGZyb20gaGVyZS4pKQ0KDQooZGVmdW4gZGVzY3JpYmUtcGF0aHMg KGxvY2F0aW9uIG1hcCkNCiAgKGFwcGx5ICMnYXBwZW5kIChtYXBjYXIgIydkZXNjcmliZS1wYXRo IChjZGRyIChhc3NvYyBsb2NhdGlvbiBtYXApKSkpKQ0KDQooZGVmdW4gaXMtYXQgKG9iaiBsb2Mg b2JqLWxvYykNCiAgKGVxIChzZWNvbmQgKGFzc29jIG9iaiBvYmotbG9jKSkgbG9jKSkNCg0KKGRl ZnVuIGRlc2NyaWJlLWZsb29yIChsb2Mgb2JqcyBvYmotbG9jKQ0KICAoYXBwbHkgIydhcHBlbmQg KG1hcGNhciAobGFtYmRhICh4KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAoeW91IHNl ZSBhICx4IG9uIHRoZSBmbG9vci4pKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAocmVtb3Zl LWlmLW5vdCAobGFtYmRhICh4KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChpcy1hdCB4IGxvYyBvYmotbG9jKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb2JqcykpKSkNCg0KKGRlZnVuIGxvb2sgKCkNCiAgKGFwcGVuZCAoZGVz Y3JpYmUtbG9jYXRpb24gKmxvY2F0aW9uKiAqbWFwKikNCiAgICAgICAgICAoZGVzY3JpYmUtcGF0 aHMgKmxvY2F0aW9uKiAqbWFwKikNCiAgICAgICAgICAoZGVzY3JpYmUtZmxvb3IgKmxvY2F0aW9u KiAqb2JqZWN0cyogKm9iamVjdC1sb2NhdGlvbnMqKSkpDQoNCihkZWZ1biB3YWxrLWRpcmVjdGlv biAoZGlyZWN0aW9uKQ0KICAobGV0ICgobmV4dCAoYXNzb2MgZGlyZWN0aW9uIChjZGRyIChhc3Nv YyAqbG9jYXRpb24qICptYXAqKSkpKSkNCiAgICAoY29uZCAobmV4dCAoc2V0ZiAqbG9jYXRpb24q ICh0aGlyZCBuZXh0KSkgKGxvb2spKQ0KICAgICAgICAgICh0ICcoeW91IGNhbnQgZ28gdGhhdCB3 YXkuKSkpKSkNCg0KKGRlZm1hY3JvIGRlZnNwZWwgKCZyZXN0IHJlc3QpIGAoZGVmbWFjcm8gLEBy ZXN0KSkNCg0KKGRlZnNwZWwgd2FsayAoZGlyZWN0aW9uKQ0KICBgKHdhbGstZGlyZWN0aW9uICcs ZGlyZWN0aW9uKSkNCg0KKGRlZnVuIHBpY2t1cC1vYmplY3QgKG9iamVjdCkNCiAgKGNvbmQgKChp cy1hdCBvYmplY3QgKmxvY2F0aW9uKiAqb2JqZWN0LWxvY2F0aW9ucyopIChwdXNoIChsaXN0IG9i amVjdCAnYm9keSkgKm9iamVjdC1sb2NhdGlvbnMqKSBgKHlvdSBhcmUgbm93IGNhcnJ5aW5nIHRo ZSAsb2JqZWN0KSkNCiAgICAgICAgKHQgJyh5b3UgY2Fubm90IGdldCB0aGF0LikpKSkNCg0KKGRl ZnNwZWwgcGlja3VwIChvYmplY3QpDQogIGAocGlja3VwLW9iamVjdCAnLG9iamVjdCkpDQoNCihk ZWZ1biBpbnZlbnRvcnkgKCkNCiAgKHJlbW92ZS1pZi1ub3QgKGxhbWJkYSAoeCkNCiAgICAgICAg ICAgICAgICAgICAoaXMtYXQgeCAnYm9keSAqb2JqZWN0LWxvY2F0aW9ucyopKQ0KICAgICAgICAg ICAgICAgICAqb2JqZWN0cyopKQ0KDQooZGVmdW4gaGF2ZSAob2JqZWN0KQ0KICAobWVtYmVyIG9i amVjdCAoaW52ZW50b3J5KSkpDQoNCihkZWZwYXJhbWV0ZXIgKmNoYWluLXdlbGRlZCogbmlsKQ0K DQooZGVmcGFyYW1ldGVyICpidWNrZXQtZmlsbGVkKiBuaWwpDQoNCihkZWZzcGVsIGdhbWUtYWN0 aW9uIChjb21tYW5kIHN1Ymogb2JqIHBsYWNlICZyZXN0IHJlc3QpDQogIGAoZGVmc3BlbCAsY29t bWFuZCAoc3ViamVjdCBvYmplY3QpDQogICAgIGAoY29uZCAoKGFuZCAoZXEgKmxvY2F0aW9uKiAn LCcscGxhY2UpDQogICAgICAgICAgICAgICAgICAoZXEgJyxzdWJqZWN0ICcsJyxzdWJqKQ0KICAg ICAgICAgICAgICAgICAgKGVxICcsb2JqZWN0ICcsJyxvYmopDQogICAgICAgICAgICAgICAgICAo aGF2ZSAnLCcsc3ViaikpDQogICAgICAgICAgICAgLEAnLHJlc3QpDQogICAgICAgICAgICAodCAn KGkgY2FudCAsJyxjb21tYW5kIGxpa2UgdGhhdC4pKSkpKQ0KDQooZ2FtZS1hY3Rpb24gd2VsZCBj aGFpbiBidWNrZXQgYXR0aWMNCiAgICAgICAgICAgICAoY29uZCAoKGFuZCAoaGF2ZSAnYnVja2V0 KSAoc2V0ZiAqY2hhaW4td2VsZGVkKiAndCkpICcodGhlIGNoYWluIGlzIG5vdyBzZWN1cmVseSB3 ZWxkZWQgdG8gdGhlIGJ1Y2tldC4pKQ0KICAgICAgICAgICAgICAgICAgICh0ICcoeW91IGRvIG5v dCBoYXZlIGEgYnVja2V0LikpKSkNCg0KKGdhbWUtYWN0aW9uIGR1bmsgYnVja2V0IHdlbGwgZ2Fy ZGVuDQogICAgICAgICAgICAgKGNvbmQgKCpjaGFpbi13ZWxkZWQqIChzZXRmICpidWNrZXQtZmls bGVkKiAndCkgJyh0aGUgYnVja2V0IGlzIG5vdyBmdWxsIG9mIHdhdGVyKSkNCiAgICAgICAgICAg ICAgICAgICAodCAnKHRoZSB3YXRlciBsZXZlbCBpcyB0b28gbG93IHRvIHJlYWNoLikpKSkNCg0K KGdhbWUtYWN0aW9uIHNwbGFzaCBidWNrZXQgd2l6YXJkIGxpdmluZy1yb29tDQogICAgICAgICAg ICAgKGNvbmQgKChub3QgKmJ1Y2tldC1maWxsZWQqKSAnKHRoZSBidWNrZXQgaGFzIG5vdGhpbmcg aW4gaXQuKSkNCiAgICAgICAgICAgICAgICAgICAoKGhhdmUgJ2Zyb2cpICcodGhlIHdpemFyZCBh d2FrZW5zIGFuZCBzZWVzIHRoYXQgeW91IHN0b2xlIGhpcyBmcm9nLiBoZSBpcyBzbyB1cHNldCBo ZSBiYW5pc2hlcyB5b3UgdG8gdGhlIG5ldGhlcndvcmxkcy0geW91IGxvc2UhIHRoZSBlbmQuKSkN CiAgICAgICAgICAgICAgICAgICAodCAnKHRoZSB3aXphcmQgYXdha2VucyBmcm9tIGhpcyBzbHVt YmVyIGFuZCBncmVldHMgeW91IHdhcm1seS4gaGUgaGFuZHMgeW91IHRoZSBtYWdpYyBsb3ctY2Fy YiBkb251dC0geW91IHdpbiEgdGhlIGVuZC4pKSkpDQpFT0YNCg0KDQp3aGlsZSh4ID0gZ2V0cykN CgliZWdpbg0KCQlyZXN1bHQgPSBsaXNwLmxpc3AoeCkNCgkJcHV0cyByZXN1bHQudG9fbGlzcC51 cGNhc2UNCglyZXNjdWUgPT4gZQ0KCQlwdXRzIGUubWVzc2FnZQ0KCWVuZA0KCVNURE9VVC5mbHVz aA0KZW5kDQoNCg0K ------_ extPart_001_01C5CA05.F67C280A--