y_combinator.sf 263 B

12345678910
  1. #!/usr/bin/ruby
  2. var y = ->(f) {->(g) {g(g)}(->(g) { f(->(*args) {g(g)(args...)})})};
  3. var fac = ->(f) { ->(n) { n < 2 ? 1 : (n * f(n-1)) } };
  4. say 10.of { |i| y(fac)(i) };
  5. var fib = ->(f) { ->(n) { n < 2 ? n : (f(n-2) + f(n-1)) } };
  6. say 10.of { |i| y(fib)(i) };