|
|
|
|
|
by lisper
1367 days ago
|
|
Yes, that is why I said sufficient and not necessary. The reason CONS/CAR/CDR/COND matter is not because they are necessary. That they are not necessary was known long before 1958. The reason they matter is that they are a better impedance match to human cognition than LC. People can actually write useful programs in Lisp. Very few people can write useful code in LC. Lisp matters because it is a local maximum on the ratio of real-world utility to the size of the formalism. [UPDATE] One idea I've been kicking around for a long time but have not yet acted on is to explore using abstract associative maps as a primitive and see how far that gets you. I suspect this would be a significant win in terms of comprehensibility of code. The foundational axiom would be something like: ((amap k1 v2 k2 v2 ... kn vn ...) kn) == vn So IF, for example, can be written as (amap true [then] false [else]), CONS is (amap car [left] cdr [right]), etc. Or something like that. Oh, yeah, Lisp also introduced symbols as first-class entities. That's a big win. |
|
I find programming in Haskell much more pleasant. Using car/cdr feels rather primitive compared to pattern matching.
> Lisp matters because it is a local maximum on the ratio of real-world utility to the size of the formalism.
I feel that role is better served by Haskell, which is basically typed lambda calculus with syntactic sugar on top.
Ben Lynn's awesome work [1] shows how minimal a Haskell implementation can be...
[1] https://crypto.stanford.edu/~blynn/compiler/