This applet is designed to be a fun introduction to lambda calculus. It draws heavily from the ideas contained in the paper, To Dissect a Mockingbird, by Dave Keenan. (which in turn draws from the book, To Mock A Mockingbird, by Raymond Smullyan.) To get a true appreciation for the motivation behind the bird pictures you should really read the book, but you can get enough context by perusing the paper.
There are two ways to use this applet to apply expressions and see them 'beta-reduced'. First, you can choose a bird from the drop-down menus beside each of the picture buttons, press the button marked 'APPLY BIRDS', and watch the result appear in the text window. Second, you could type your own expressions in the text boxes under the leftmost bird, press the button 'APPLY EXPRESSIONS', and (again) watch the result appear. When the applet is finished beta-reducing it will attempt to match the result to a known bird. If it finds a match the picture of the newly created bird will appear on the third picture button. If it doesn't find a match you will see a cartoon bird appear that has '?'s floating around its head. Pressing any of the buttons will result in a tune that is a combination of bird sounds 'unique' to the particular bird in the picture. This is the song that each bird sings or "is" (you probably need to read the book). The top two birds' songs represent what they sing when they are alone or when they are not responding to another bird's song. The bottom bird is the result of the bird on the top left hearing the bird on the top right. (Again, you should probably read the book)
There are several limitation of which I am currently aware (and probably many more of which I am blissfully clueless). First, the sytax of my expressions is somewhat restrictive. 'L' is a cheap substitute for the lambda symbol, all variables must be in the range "a-z" (no CAPS), and though Lxy.y and Lx.Ly.y mean the same thing in real life - in my applet they are totally different. In fact, my parser will not be happy if you use Lxy.y. Second, though I believe the applet to be beta-reducing correctly I am not certain it is in all cases. I did check most 196 fixed input possibilities (but not all) against another web program here. Third, if you play with the applet for a little while you will notice not all tunes seem to be unique - ah, well, perhaps when I have time to get more samples. Fourth, serious bird watchers will notice that I took some liberties in the names assigned to some of the pictures. Please do not use this applet as a guide for identifying birds in your area. Finally, I didn't seem to be able to make IE happy enough to use the applet, so you can only use it with Netscape - sorry.
Many thanks to the folks who helped me get this project finished. In no particular order: Thanks to Joel for patiently explaining the finer points of recursive descent parsing (over and over and . . . ). Thanks, Mike, for helping me sample the audio files from this web site (and later fixing the sample rate) to make the birds fun to listen to. Thanks to Dave Keenan for taking the time to exchange emails with me and giving me a clearer understanding of combinatorics. I really had a fun time with this assignment.