| > why doesn't it seem very impressive at first (and second, and third) sight? That's a super interesting question. Pretty much the entire challenge of LC is coming to understand why it's interesting. From our perspective, so far past the consequences of this discovery, it will all seem too obvious to state. The interestingness of LC comes out of it being so austere and so powerful. Frankly, this page's intro to it is sort of terrible. Clojure is too powerful and clunky to point directly at LC and show why it's interesting. LC is a language with three constructors var[x] reference a name
lam[x](...) create a scope where x is *known*
app(f, v) when f is lam[x], give
meaning to x within its body
Forget ideas of functions or anything else you know from CS. Just think about what these three constructors mean. To give them real meaning we have to define one more thing: the reduction step. It's what you think it is app(lam[x](body), value) ==> body{x -> value}
where the right side means that we replace all instances of "x" within "body" with "value".So imagine that to be the definition of a programming language---the whole thing. It seems a bit silly. It doesn't obviously have any of - numbers
- if-the-else
- for loops
- recursion
- mutation
- data types
It doesn't even seem to have any way of talking about how it instructs a machine on what to do. It's truly austere.So the magic, of course, is that it actually does have all of the above. Those 3 constructors and one rule are powerful enough already to generate all of that. That's what's remarkable. |