I read the 1985 Brooks MIT AI Memo that introduced the subsumption architecture early yesterday morning. I'd asked Candace to implement a compiler that took a specification close to the syntax presented in [Brooks, 1985] and generates NQC code in accord with the semantics described in that same paper. In the process of reading it, I realized that I hadn't really understood it all that well the first time I'd read it. For example, I didn't realize that a module is reset to its initial state every time that an input wire for that module changes its value. At first I didn't like this feature; I didn't want to lose the current state information but on further reflection I realize that a reset fits the subsumption philosophy.
It occurred to me as I reading that I wasn't sure how to do what I'd asked Candace to do and unless I thought it through I wouldn't be able to help her out if she ran into problems. So, I decided to implement (or at least partially implement) a subsumption compiler with NQC/RCX as the target machine. It took me longer than I expected. I started around 9:00am yesterday and had done as much as I was going to do by about 2:00am this morning. I didn't implement resets, subsumption or inhibition nodes, reader macros for conditional compilation and a bunch of other things, but most of the machinery is in place and I'm confident that I could complete the compiler if necessary (famous last words, I know) and I left copious notes on how to add the missing functionality (probably all brain-dead ramblings, given that I was writing these notes at 2:00am).
The compiler was written using the DrScheme implementation of Scheme that I heard about from Shriram Krishnamurthi and which I easily downloaded and installed on my home machine. I really like the DrScheme programming environment; it made hacking on the compiler actually fun. I hope to return to working on the compiler later in the semester if for no other reason to better understand the limitations of NQC.
I wrote up some notes on the first few chapter of Braitenberg's "Vehicles". The book is fun to read; it really is a series of deceptively-simple, thought-provoking gedanken experiments. I'm planning to use some java applets that simulate the vehicles but I'm afraid that this will be distracting. Braitenberg has distilled his lessons to their essence and I think it's important that the students meditate on those lessons in order to attain enlightenment. The fancy simulations are fun to watch but they can distract you from thinking about what's really going on.