4 ms·
I don't get one thing from this article. Am I suppose to be impressed by this code that prints some fruits? > In order to understand what can be done with so l
by romanovcode 8y ago
I don't get one thing from this article. Am I suppose to be impressed by this code that prints some fruits?
> 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.
- martyalain 8y agoIt's not intended to impress anybody. I write the result first, an unreadable lambda-calc expression, then I explain the making of in few lines easier to understand, IMHO, than what I could see elsewhere. Did I missed something in the explanations?
- empath75 8y agoLambda calculus is an attempt to build the foundations of computation using a couple of primitives and some re-write rules. It’s the equivalent of ZFC for math.
- martyalain 8y agoIt's just what I try to do. I think that the lambda-calculus is the Maxwell's equations of the computer field and not the LISP as Alan Kay said. The implementation is also an important point. In the wiki page "towards λ-calculus" I use a standard AST based evaluator, a minimal version of ( http://lambdaway.free.fr/workshop/?view=lambdacode http://lambdaway.free.fr/workshop/?view=lambdacode ). In this other wiki page ( http://lambdaway.free.fr/?view=NIL http://lambdaway.free.fr/?view=NIL ) I use a completely different implementation, {lambda talk}, where the re-write rules are the heart of the machine: 1) finding from inside-out S-expressions in the whole code and replacing them by words and 2) inside lambdas, replacing in the body arguments by the given values. Not only this implementation works like (what I understand to be) a Turing machine, but it works fine in a wiki context where quoting words and bracketing sentences would be unacceptable. I find this "inverted" implementation worthwhile, from the both theoretical and practical points of view.
- kazinator 8y agoLambda Calculus is perhaps the Maxwell's equations of computability, not of the computer field. What Kay might have meant is that Lisp is the Maxwell's equations of programming a computer to do something useful. 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.]
- martyalain 8y ago"Lambda Calculus is perhaps the Maxwell's equations of computability, not of the computer field." I agree with you. "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}.