Delphi : クロージャ

[id:lethevert:20060110]
ちょっと修正した。

      • -

今回作成したクロージャは大きく2種類あるが、

  1. _(@F)
  2. _(@F, Init, @Final)

1つめの方は、普通に使われるクロージャで、2つめの方は、クロージャが関数の返値として使われる場合のクロージャです。2つめの方は、環境を永続的に利用できるように、動的レコードを作成してくっつけているので、ちょっと面倒な形になっています。
リスト操作などに使うには、1つめのクロージャで十分です。
2つめのクロージャが必要になるのは、コンビネータを作る時などに必要になります。(というか、2つめのクロージャの使いにくさを考えると、Delphiコンビネータを作るのは、実質的に無理かな)
あと、1つめのクロージャは、再帰的に生成(関数内でその関数のクロージャを作成すること)はできないようだ。

      • -

ところで、先のfix関数って、Y Combinatorというんだね、ということに最近気づいた。
http://en.wikipedia.org/wiki/Fixed_point_combinator