穴日記

どうだ明るくなったろう

ActionScript3.0でYコンビネータを実装

まあタイトルどおりですね。ASはちゃんと無名関数とかあるので楽です。

基本的には以下のSchemeコードを移植する感じです。
http://www.loveruby.net/ja/misc/ycombinator.html

package 
{
	import flash.display.Sprite;
	
	public class Main extends Sprite 
	{
		public function Y(f) {
			return (
				(function (proc) {
					return f(function (arg) {
						return (proc(proc))(arg);
					});
				})(function (proc) {
					return f(function (arg) {
						return (proc(proc))(arg);
					});
				})
			);
		}
		
		public function fact(f) {
			return (
				function (n) {
					if (n == 0) {
						return 1;
					} else {
						return n * f(n - 1);
					}
				}
			);
		}

		
		public function Main():void 
		{
			trace((Y(fact))	(5));
		}
	}
	
}