Settings

Theme

Y Combinator in Python

akropolix.net

8 points by technoguyrob 18 years ago · 6 comments

Reader

silentbicycle 18 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 18 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 18 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 18 years ago

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

daragh 18 years ago

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

kingkongrevenge 18 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