Live data from Hacker News

Programming With Nothing: FizzBuzz in the lambda calculus in Ruby

experthuman.com

11–20 of 55 posts

Re: Programming With Nothing: FizzBuzz in the lambda calculus in Ruby

#11
post #7

The same can be done with Python lambdas: >>> ZERO = lambda f: lambda x: x >>> FIVE = lambda f: lambda x: f(f(f(f(f(x))))) >>> to_int = lambda f: f(lambda x: x+1)(0) ... etc.

Yeah you can do the full lambda calculus in Python:

https://raw.github.com/sdiehl/church-numbers/master/church.p...

Re: Programming With Nothing: FizzBuzz in the lambda calculus in Ruby

#12
post #6

Holy cow. This could have replaced ~8 weeks of my CS languages/compilers class, and I would have understood the material better at the end of it.

Yay, I have a new project for this weekend! For those who missed it, he has a github project at (https://github.com/tomstuart/nothing) where you can reimplement this yourself, with some tips to help you out.

I especially like how he neither uses a fancy academic language which people can dismiss outright for not being practical - like Haskell. But neither do you need ridiculous amounts of boilerplate that obscures the message - like in Java. Ruby is used for real stuff and doesn't have pretentious academic baggage.

Edit: spelling.

Re: Programming With Nothing: FizzBuzz in the lambda calculus in Ruby

#13
post #6

Holy cow. This could have replaced ~8 weeks of my CS languages/compilers class, and I would have understood the material better at the end of it.

Yay, I have a new project for this weekend! For those who missed it, he has a github project at ( https://github.com/tomstuart/nothing ) where you can reimplement this yourself, with some tips to help you out. I especially like how he neither uses a fancy academic language which people can dismiss outright for not being practical - like Haskell. But neither do you need ridiculous amounts of boilerplate that obscures…

> a fancy academic language which people can dismiss outright for not being practical - like Haskell

Actually that could be a good way to filter your audience. Some of those who would be least likely to appreciate this tutorial (and would be likely to post comments complaining how pointless (no pun intended) it was) would avoid a Haskell article in the first place.

Re: Programming With Nothing: FizzBuzz in the lambda calculus in Ruby

#14
Yes yes yes, wonderful article. Look forward to watching the video later as well :)

I did a lightning talk at SCNA this year which covered similar, if somewhat different, and certainly less comprehensive ground, which may be of interest to readers of this thread/article.

http://git.io/objects-as-closures (full code and all everything)

https://gist.github.com/1372131#file_v2.md (outline/notes)

(please don't make fun of me, Scheme peeps)

Re: Programming With Nothing: FizzBuzz in the lambda calculus in Ruby

#15
post #4

That was pretty cool. Interesting to note that the numbers he used are essentially an implementation of the Peano Axioms, where the successor function wraps the predecessor in a lambda. ( http://en.wikipedia.org/wiki/Peano_Axioms ) Here's a simple recursively defined number system in scheme: https://gist.github.com/1466985

Indeed. This encoding is due to church (http://en.wikipedia.org/wiki/Church_encoding).

Re: Programming With Nothing: FizzBuzz in the lambda calculus in Ruby

#16
Excellent article, though I had to laugh at the introduction of the if statement just to avoid the appearance of calling the boolean directly, which happens to be exactly how Smalltalk implements its if statements: a direct call to the boolean passing a block as the argument. This approach to programming is how Smalltalk has only a handful of reserved words vs the 80'ish I think Ruby has.

Re: Programming With Nothing: FizzBuzz in the lambda calculus in Ruby

#18
post #6

Holy cow. This could have replaced ~8 weeks of my CS languages/compilers class, and I would have understood the material better at the end of it.

I don't know.

I see it as a kind of entertaining academic game - a Glass Bead Game, if you will, and I intend the deep allusion - but I wouldn't put too much faith in it teaching you much about the mechanics of compilers. It's one way of decomposing semantics into more simple elements, but it's not the one chosen for almost all practical languages, which after all have to execute on silicon, not in the Lambda calculus.

It doesn't teach anything about parsers, and nor does it exercise much thinking in trees. It does emphasize recursion, but in a way that makes it seem like an absurd roundabout way of doing things, rather than something that more usually simplifies the expression of a program. Above all, it doesn't really demystify how the text of your program changes the coloured lights on your screen. It's a splendidly constructed wonderland, a pyramid of abstraction with nothing but function application at its core, but I don't think it leaves you with a lot more than a sense of having seen something very clever.

(FWIW, nothing in the presentation was new to me, so any residual sense of wonder has faded. Take that into account in my perhaps cynical judgement.)

Re: Programming With Nothing: FizzBuzz in the lambda calculus in Ruby

#19
post #18
post #6

Holy cow. This could have replaced ~8 weeks of my CS languages/compilers class, and I would have understood the material better at the end of it.

I don't know. I see it as a kind of entertaining academic game - a Glass Bead Game, if you will, and I intend the deep allusion - but I wouldn't put too much faith in it teaching you much about the mechanics of compilers. It's one way of decomposing semantics into more simple elements, but it's not the one chosen for almost all practical languages, which after all have to execute on silicon, not in the Lambda calculu…

parsing is in my opinion the crappiest part of compiler writing. I feel pretty safe saying that because we have made tools to automate or near-automate the act of writing parsers for compilers ...

I would argue that there's a big difference between "demystify how the text of your program changes the coloured lights on your screen" and "demystify why the text of your program changes the coloured lights on your screen". if you are interested only in the first question, you might be an engineer. if you are also interested in the second question, you might be a computer scientist...

Re: Programming With Nothing: FizzBuzz in the lambda calculus in Ruby

#20
post #13

Earlier quoted context omitted.

Yay, I have a new project for this weekend! For those who missed it, he has a github project at ( https://github.com/tomstuart/nothing ) where you can reimplement this yourself, with some tips to help you out. I especially like how he neither uses a fancy academic language which people can dismiss outright for not being practical - like Haskell. But neither do you need ridiculous amounts of boilerplate that obscures…

> a fancy academic language which people can dismiss outright for not being practical - like Haskell Actually that could be a good way to filter your audience. Some of those who would be least likely to appreciate this tutorial (and would be likely to post comments complaining how pointless (no pun intended) it was) would avoid a Haskell article in the first place.

true, if you're optimising for an academic discourse. But that also limits its accessibility for any potentially interested who don't know the academic language. I can't be the only one who stopped reading an Ocaml paper merely for not knowing Ocaml. Its clear he's optimising for knowledge transfer as he spent the time to not only post code on github, but provide different branches for those with different backgrounds.

I think this tutorial shows what we really mean about Turing equivalence in languages, about how data structures can be represented as functions, and presents a wider point of view that opens up other possible program designs.

Post reply on HN