Hatena::ブログ(Diary)

釣り日誌

2008-04-15 (Tue)

問題1.32

今日のSICP読書会は、先週に引き続いての高階手続きやlambdaなんかについて。

問題1.32のaccumulateを他言語で書けるかどうかという話になったので、ActionScript3で書いてみました。

package {
    import flash.display.Sprite;

    public class Accumulate extends Sprite {

        public function Accumulate() {

            var fact:Function = function(n:Number):Number {
                return accumulate(function(a,b){return a * b}, 1, function(i){return i}, 1, function(i){return i + 1}, n);
            };

            var fact2:Function = function(n:Number):Number {
                return accumulate2(function(a,b){return a * b}, 1, function(i){return i}, 1, function(i){return i + 1}, n);
            };

            trace(fact(3));
            trace(fact(5));

            trace(fact2(3));
            trace(fact2(5));
        }
        
        //再帰的プロセス
        private function accumulate(combiner:Function, null_value:Number, term:Function, a:Number, next:Function, b:Number):Number {
            return (a > b) ? null_value : combiner(term(a), accumulate(combiner, null_value, term, next(a), next, b));
        }
        
        //反復的プロセス
        private function accumulate2(combiner:Function, null_value:Number, term:Function, a:Number, next:Function, b:Number):Number {
            var iter:Function = function(a, result):Number {
                return (a > b) ? result : iter(next(a), combiner(term(a), result));
            };
            return iter(a, null_value);
        }
    }
}

2008-03-31 (Mon)

vimのAS3用テンプレート

vimで新規にファイルを開いたときに、雛形としてファイルを設定できるらしい。知らんかったです。

http://d.hatena.ne.jp/higeorange/20071003/1191356790

で、そのテンプレートを、ちょっと高機能にしたのが、template plugin。

http://nanasi.jp/articles/vim/templatefile_vim.html

ActionScript3のテンプレートは以下のような感じで。

package {
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;

	public class @FILE@ extends Sprite {

		public function @FILE@() {
			init();
		}

		private function init():void {
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;

			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}

		private function onEnterFrame(event:Event):void {
		}
	}
}

2008-03-23 (Sun)

再帰的な木

結城さんの再帰的な木をaction scriptで書いてみました。

http://www.hyuki.com/math/#javatree

ソースとswf

ソースの書き方はほぼ同じなんですが、木がどういう順序で作られるか、ソースをぱっと見わからなかったで、setTimeoutを使って線が描かれる過程を示しています。

スライダーは、ActionScript 3.0 アニメーションに載っていたスライダークラスを使っています。