Towards λ-calculus
lambdaway.free.fr
lambdaway.free.fr
[0] - https://pdfs.semanticscholar.org/d986/546bc3780db3a3c0f8d88b...
[NB Related topics included strongly recommending GEB].
Rabbit hole warning. If you go down this particular hole you will lose at least a month and maybe more. It will be the most fun you've had in a long time but your productivity will take an extreme hit.
To this day (almost exactly 30 years) - I am staggered that you can express Y in terms of S & K. I know this follows trivially but actually having coded it and watched it run (slowly) did made it very real to me.
NB This was running on an Orion minicomputer with rather limited memory - I had to implement a mark and sweep garbage collector to get expressions of any size to run!
To make sure(er) the PDF sticks around, here it is stored on IPFS: https://ipfs.io/ipfs/QmRKHcRYBpYJBWbiRkPeGA9kWfsjUtZPq45oMi6...
Again and again, as a personal work, I try to find the best minimal foundations for a language. Beside lambdatalk and its “non standard” regexp based implementation, I explore with lambdacode a standard AST based implementation.
Am I on the good lambda-calculus way?
- http://lambdaway.free.fr/workshop/?view=lambdacode_inside_min
- http://lambdaway.free.fr/workshop/?view=lambdacode
- http://lambdaway.free.fr/workshop/?view=helloworld
- http://lambdaway.free.fr/
If you are willing to read it as pure speculation, I would appreciate that. If not, I am sure you have a waste basket handy.Thanks
Langlands :-)
https://news.ycombinator.com/item?id=16946261
But if a submission gets no comments you can re-submit it after a few hours without setting off the de-duper.
> In order to understand what can be done with so little
((lambda (f n) (f f n)) (lambda (f list) ((((lambda (n) (n (lambda (x) (lambda (z) (z (lambda (x y) y)))) (lambda (z) (z (lambda (x y) x))))) list) ((lambda (x y) (lambda (z) (z x y))) (lambda (list) '.) (lambda (list) (join ((lambda (z) (z (lambda (x y) x))) list) (f f ((lambda (z) (z (lambda (x y) y))) list)) )))) list)) ((lambda (x y) (lambda (z) (z x y))) 'apple ((lambda (x y) (lambda (z) (z x y))) 'banana ((lambda (x y) (lambda (z) (z x y))) 'lemon ((lambda (x y) (lambda (z) (z x y))) 'grapes ((lambda (x y) (lambda (z) (z x y))) 'orange (lambda (s z) z)))))))
apple banana lemon grapes orange
Not too impressive if you ask me, maybe if you want to obfuscate your code so nobody will understand it. Maybe then.Lambda Calculus doesn't even have numbers; you either have to build them out of functions, or else extend Lambda Calculus with numeric terms. Lambda Calculus doesn't have eval or quote, and if it did, they wouldn't work because Lambda Calculus doesn't have a data structure representing Lambda Calculus source code. Lambda Calculus also lacks practicalities like assignable variables, which are part of computer science and mutable data structures in general.
MacCarthy had another analogy: Lisp for programming is kind of like the advantage of using binary over decimal for digital computers:
> This internal representation of symbolic information gives up the familiar infix notations in favor of a notation that simplifies the task of programming the substantive computations, e.g. logical deduction or algebraic simplification, differentiation or integration. If customary notations are to be used externally, translation programs must be written. Thus most LISP programs use a prefix notation for algebraic expressions, because they usually must determine the main connective before deciding what to do next. In this LISP differs from almost every other symbolic computation system. COMIT, FORMAC, and Formula Algol programs all express the computations as operations on some approximation to the customary printed forms of symbolic expressions. SNOBOL operates on character strings but is neutral on how character strings are used to represent symbolic information. This feature probably accounts for LISP's success in competition with these languages, especially when large programs have to be written. The advantage is like that of binary computers over decimal - but larger. [History of Lisp -> LISP prehistory - Summer 1956 through Summer 1958.]
"What Kay might have meant is that Lisp is the Maxwell's equations of programming a computer to do something useful." But what I discovered is that lambda calculus + S-expressions define a consistent infrastructure on which useful superstructures can be built, data structures (pairs, trees, lists,...) and data controls (recursion). And make implementation a pleasure, either via AST (lambda code) or via regexps {lambda talk}.