What with all the hubbub about Erlang, I've started diving into functional programming languages. Back in school, I learned a bit of Scheme as part of a mostly-Pascal-based second-semester CS course -- just before Scheme became the language with which the introductory CS concepts were introduced to first-year CS students at my university. To get back into the swing of things, I cracked open my copies of Springer and Friedman's Scheme and the Art of Programming, and The Scheme Programming Language, 3rd ed., and downloaded the excellent PLT Scheme environment. Currently I'm working my way through the exercises in the Springer/Friedman book -- fairly elementary, but I figured I'd start from square one.
Initial observations:
- I don't find the parentheses nearly as odious as I thought I would. Modern Scheme environments make matching the parens a snap, and the syntax coloring highlights the important stuff -- namely, the stuff within the parens!
- I really appreciate the language's small core -- the fact that many everyday constructs (e.g.
let) can be defined in terms of even more primitive constructs (lambda). - Cool to be able to leverage tail recursion and express certain constructs recursively while retaining the smaller memory footprint of the equivalent iterative expression.
- Continuations are first-class concepts in Scheme. These still make my head spin, need to read/experiment further...
- I can understand why the cool Lisp kids are all, "What's the big deal about closures/map/reduce/etc., they've been here all along!"
More as interesting things arise.