Hatena::ブログ(Diary)

Higé au lait Twitter

 | 

2006年09月06日

あまりつかえないArrayメソッドを作ってみた

Haskellの関数を実装してみる。4章(普通のHaskellプログラミング)までで簡単にできそうなものを。

// http://la.ma.la/blog/diary_200510062243.htm
Array.prototype.clone = function(){
    var tmp = [];
    for(var i=0;i<this.length;i++){
        tmp[i] = this[i]
    }
    return tmp
}

Array.prototype.take = function(n) {
    return this.slice(0,n);
}

Array.prototype.unwords = function() {
    return this.join(" ");
}

Array.prototype.tails = function() {
    var ary = this.clone();
    var tmp = ary.clone();
    var result = new Array(tmp);
    for(var i=0,len=ary.length;i<len;i++) {
        ary.shift();
        tmp = ary.clone();
        result.push(tmp);
    }
    return result;
}

実行例

js> a=[1,2,3,4,5]
1,2,3,4,5
js> a.take(3)
1,2,3
js> a.unwords()
1 2 3 4 5
js> a.tails()
1,2,3,4,5,2,3,4,5,3,4,5,4,5,5,
// [[1,2,3,4,5],[2,3,4,5],[3,4,5],[4,5],[5],[]] となってるはず。

一番上のclone()はtails()を作るために拝借。

同じく紹介されていたclone()メソッド

Array.prototype.clone = function(){
    return Array.apply(null,this)
}

だとうまくいかなかったので上のを使った。

あぁコメント欄に書いてあった。

トラックバック - http://d.hatena.ne.jp/higeorange/20060906/1157529946
 |