【関数型言語】Y-Combinatorって良くわからん… | さすらいびとの徒然漂流記

さすらいびとの徒然漂流記

ふらふら漂流するさすらいびとのように,色々な話題についてお気楽極楽,徒然なるままに…

前の日曜日に書いた記事 に関連するんだけど,

あれって,ラムダ計算では有名な


Y-Combinator


あるいは


不動点演算子
(fixed point combinator)


ってものに関係するらしい.


更に,プログラミング言語の制約で

そのままではstack overflowが

発生してしまうのを回避するため,

遅延評価を組み込んだものは更に


Z-Combinator


って言うらしい.


これって何かって言うと,


ある関数を入力した時に

その関数の不動点関数を

出力する関数


ってことらしい.


で,これを式で書くと,

ある関数F(x)とし,

Y(x)をY-combinatorとすると,


Y(F(x)) = F(Y(F(x)))


という感じで表される.


つまり,


Y(F(x)) = fp(x)


とすると,

Yによって関数Fから関数fpが出力され,

さらに,


fp(x) = F(fp(x))


から,fpはFの不動点となっている.


で,こいつが何者かということなんだけど,


ラムダ計算ではすべてが関数でプログラムできる


っていう原則?があるんだけど,

そこで,再帰処理,

つまり,制御処理のループを

表現するものとして

このY-Combinatorがある

ってことらしい.


まあ,詳細はきちんとしたものを

読んで理解する必要があるけどね.



一応,さすらいびとが理解するために

参考にしたサイトだけでもここに上げておくよ.


おとうさんにもわかるYコンビネータ!(絵解き解説編) - よくわかりません

2009-04-09 - きしだのはてな


あと,参考資料として

Y-Combinatorの

いろいろな言語での実装を

紹介しているサイトも.


関数型 - Yコンビネータ | Diaspar Journal
不動点演算子どう書く?org