Settings

Theme

Y Combinator in Python

akropolix.net

8 points by technoguyrob · 6 comments

Reader

6 threads
silentbicycle

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

    # 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

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

markessien

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

daragh

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

kingkongrevenge

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