Yoh2の日記: 続・D言語で不動点コンビネータ
日記 by
Yoh2
先日の日記にて、D言語で不動点コンビネータを書いてみたら分かりにくくなったと述べたが、実はこれだけで実現できることに気付いた。
R delegate(TS) fix(R, TS...)(R delegate(R delegate(TS), TS) f)
{
return delegate(TS xs){ return f(fix(f), xs); };
}
ラムダ式をサポートしている版ならこう。
R delegate(TS) fix(R, TS...)(R delegate(R delegate(TS), TS) f)
{
return (TS xs) => f(fix(f), xs);
}
あらやだ分かり易い。
前回の日記のコードはYコンビネータを実装したものだったが、そんなことしなくても、単純に不動点の定義を書き下すだけで済んでしまうわけで。
あ、でも、無名関数の再帰を実現するコードで自らの名前を使ってしまう (fixの定義中でfixを使う) のは反則気味かな?
続・D言語で不動点コンビネータ More | Reply ログイン