ReoScriptエンジンのランバー表現

1113 ワード

javascriptはスクリプト言語として、lambada表現とクローズドという特性はすべて自然に支持されています.ReoScriptエンジンでこれらの特性を実現することはそれほど難しくないです.
以下の例では、C((zhi)のLambada表式における機能の一部を実現しています.
加算を行うLamda表現
var plus = (a, b) => a + b;
plus(1, 2);
結果は3です
Sum演算を行うLamban表現
Array.prototype.sum = selector => {
    var total = 0;
        
    for(element in this) {
    total += (selector == null ? element : selector(element));
    }
    return total;
};

function Sales(year, amount) {
    this.year = year;
    this.amount = amount;
}
      
var arr = [ new Sales(2005, 130),
            new Sales(2006, 100),
            new Sales(2007, 210),
            new Sales(2008, 190), ];

arr.sum(obj => obj.amount);
結果は630です
WhereフィルタリングをするLamband表現
Array.prototype.where = predicate => {
    var result = [];
        
    for(var element in this)
    if(predicate(element))
        result.push(element);

    return result;
};

var arr = [1, 2, 5, 7, 8, 10, 12, 15, 17, 18, 19];
var result = arr.where(n => n > 10);
結果は[12,15,17,18,19]