Comment detail

不動点演算子 (Nested Flatten)
以下のサイトが分かりやすかったです。
結果的に#5733さんのコードそのままになりました。
1
2
3
4
5
6
Y = function(f)
  g = function(proc) return f(function(arg) return proc(proc)(arg) end) end
  return g(g)
end

print(Y(function(f) return function(n) if n < 2 then return 1 else return n * f(n - 1) end end end)(10))
1
2
3
4
5
def Y(f):
  g = lambda proc: f(lambda arg: proc(proc)(arg))
  return g(g)

print Y(lambda f: lambda n: 1 if n < 2 else n * f(n - 1))(10)

Index

Feed

Other

Link

Pathtraq

loading...