Settings

Theme

Y Combinator in Python

akropolix.net

8 points by technoguyrob 17 years ago · 6 comments

Reader

silentbicycle 17 years ago

Of course, if you actually use this you can smash the stack -- Python doesn't currently have any kind of tail call optimization. (That factorial function isn't tail-recursive anyway, though.)

It doesn't look like Ruby has tail-call optimization, either. Lua does...what other primarily-scripting (i.e., not Scheme or Haskell) languages do?

burke 17 years ago

    # Ruby 1.8.7
    def Y
      lambda { |f| f.call(f) }.call(
        lambda do |g|
          yield(lambda { |*n| g.call(g).call(*n) })
        end)
    end
    Y { |this| lambda { |n| n == 0 ? 1 : n * this.call(n - 1) } }.call(5)
    #=> 120
pavelludiq 17 years ago

The Y combinator is just like python decorators, or generators, you just HAVE to blog about them, or you're not C001!

markessien 17 years ago

This must be about the 6th different 'Y Combinator in X' I have seen on this site.

daragh 17 years ago

That's a pretty solid butchering of the design of daringfireball.net

kingkongrevenge 17 years ago

Perl6 ftw:

my $factorial = sub (Int $x) { $x < 2 ?? 1 !! $x * &?ROUTINE($x - 1); }

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection