Lambda Calculus and Lisp, part 1
babbagefiles.xyz
babbagefiles.xyz
Most hobby Lisps I run into seem to be more of a lambda calculus rite of passage than aiming for practical use.
I've implemented several Lisp interpreters myself in different languages, very much focused on practical use, and they don't look anything like this.
> Programs written in the binary lambda calculus are outrageously small. For example, its metacircular evaluator is 232 bits. [...] Something like this could have practical applications in compression formats, which need a small busy beaver that can produce large amounts of data. It's also just downright cool.
> For example, if you built a compression tool you could have it encode a file as a lambda expression that generates it. Since it's difficult to introduce a new compression format that most people haven't installed, you could prefix the compressed file with this 383 byte interpreter to get autonomous self-extracting archives that anyone can use.
I partway expect @tromp to show up in this thread, but see his excellent site[2] for discussion of the algorithmic information theoretical applications of LC, exploration of Kolmogorov complexity, etc.
1. https://justine.lol/lambda/
2. https://tromp.github.io/cl/cl.html
[edit: spelling]“I shall write a brainfuck interpreter in Lambda Calculus for fun.” Sure, sure, as one does.
HN never ceases to surprise me!
Lisp seems to have a sort of almost mystical promise that maybe in some fundamental, mathematical point in conceptspace, the two forms of "simplicity" converge. I think that Lambda calculus, like quantum mechanics, gives the lie to this promise.
The Church numeral for 9 is not a very readable symbol for human beings, but the Church numerals as expressed in binary are more compact than an ASCII or UTF-8 representation of those numerals, and once they've been defined along with a few operations, you get big swaths of number theory stuff "for free".
Disclaimer: just a guy on HN, no credentials
Edit: Also, I starred your eli repository, it looks really interesting!
Functions in plenty of languages do not work as the lambda calculus suggests they should, and those languages are mostly fine, but when user code gets dicey, they can operate in surprising and counterintuitive ways. What I like about the lambda calculus is that it captures, in an unbelievably small package, many of the things that we intuitively want a language to do.
https://flownet.com/ron/lambda-calculus.html
or the video version:
https://www.youtube.com/watch?v=8qC1iZN5ozw
It shows how you can compute factorials in pure lambda calculus, and actually get it to run on a real computer in non-geologic time. The lessons learned from the program transformations along the way can be applied to real programs.
And now, just like a decade ago, my eyes glaze over when I read about this.
I can easily reason about functions that return functions that return functions but this just completely goes over my head.
Byte Magazine Volume 04 Number 08 - LISP