Lately, reading comp.lang.scheme is more amusing and instructive than ever. Scheme is (as Albert Einstein would put it) as simple as possible, but not simpler. Or, to use the words of Michael Vanier, it is an LFSP rather than an LFM. Which means that it has its (often necessary) subtleties and shadowy corners. Some newcomers in the newsgroup are making a serious effort at learning Scheme, and stumbling upon those corners, which are being subsequently illuminated with insightful posts. For instance,
When are two objects equal? As you probably know, Scheme comes with several equality predicates: EQ?, EQV?, EQUAL?, =, STRING=?… How so? Aren’t all equal objects equal? Well, as it happens, some equal objects are more equal than others. Perhaps, like me, you think that you understand the differences between those predicates; and perhaps, like me, you’ll discover that you were missing some small print after reading this Socratic dialogue between a hacker and a newbie, which summarises an interesting thread with participants as insightful as Berkeley’s professor Brian Harvey. After reading his posts, you may be interested in viewing his SICP classes too.
Closures are of paramount importance to functional programming. As a matter of fact, object oriented programming can arguably be described as a poor man’s closure-based programming. Max Hailperin has written today a beautiful overview of what closures are and how they are implemented. Again, i thought i already knew. If you enjoy Max’s writing, this is your lucky day: he is one the authors of Concrete Abstractions, an introduction to CS using Scheme freely available in the link above.