不動点演算子
Posted feedbacks - Lua
以下のサイトが分かりやすかったです。 結果的に#5733さんのコードそのままになりました。
see: Y Combinator
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))
|


matarillo
#5680()
Rating2/4=0.50
不動点演算子とは、関数を引数に取り、その関数の不動点を返すような関数です。 つまり、不動点演算子である関数gが関数fを引数に取るとき、 f(g(f)) = g(f) となります。
お題は不動点演算子を実装することです。(Yコンビネータを実装しても結構ですが、それ以外でも、コンビネータになっていなくてもOKとします)
see: Wikipedia
[ reply ]