4 ms·
> "Lisps are unreasonably effective because they have lambda calculus behind them." I don't really buy that. CL remains unreasonably effective even when used
by darkpuma 8y ago
> "Lisps are unreasonably effective because they have lambda calculus behind them."
I don't really buy that. CL remains unreasonably effective even when used by somebody using it in an imperative manner. And I think the majority of CL code out there is truly multi-paradigm, not functional. I think most of the unreasonable effectiveness comes from the relationship between s-expressions and cons.
- nine_k 8y agoBeing imperative / functional is sort of orthogonal. The s-expressions that represent everything give you an immense power of composability, both in functions and in macros. You can define your own language in terms of Lisp in a way you can't in a Algol derivative. I suppose that s-expressions and the ways to transform them when they represent a function application (that is, basically always) critically depend on lambda calculus. I can be wrong, though.
- darkpuma 8y agoAs I understand it, lambda calculus is strictly functional. I also think the relationship between s-expressions and lambda calculus is tenuous at best. If anything, it's s-expressions and lambda calculus that are orthogonal. You could use s-expressions as your notation for lambda calculus, but you could just as well not.
- lisper 8y agoYou are correct. S-expressions are a serialization format for trees and lambda calculus is a computational formalism. There is no inherent connection between them. You can have either one without the other. However, the two together make a really magical combination because each one is a sort of local maximum in its respective design space.
- dreamcompiler 8y agoOf course. Haskell is even more faithful to lambda calculus than Lisp (because it has automatic currying and no side effects) but it doesn't use s-expressions at all.
- joshmarlow 8y agoI could see the unreasonable effectiveness of a Lisp (CL or Scheme) beginning with the elegance and programmability that comes from being based on the lambda calculus. But to me it feels like the power of CL comes from having acquired a variety of features that can exactly solve day-to-day problems and edge cases. Take the condition system: it first struck me as weird and unnecessarily complicated until I encountered the use-case that conditions exactly solve. I think that comes from engineers using the language being the same engineers who can add features to the language. It's an extreme form of dog-fooding. It's like a beautiful mathematical core that grew a lot of scar-tissue to handle wordly edge cases. EDIT: because I used Slack formatting, not Hackernews formatting.