Skip to content

Instantly share code, notes, and snippets.

@ShigekiKarita
Created July 25, 2014 12:31
Show Gist options
  • Save ShigekiKarita/ba808f6bdec6eb323412 to your computer and use it in GitHub Desktop.
Save ShigekiKarita/ba808f6bdec6eb323412 to your computer and use it in GitHub Desktop.
Evaluation strategy in JavaScript

簡単な計測用の関数が作りたかった

const loop = _=> loop();    // stack-overflow
const one = _ => 1;

one(loop());                // -> "too much recursion" 
one(_=> loop());            // -> 1

ということで、ラムダに入れれば遅延評価(普段は正格評価)なので

const time = (process, n=1) =>
{
    let total = 0.0;
    
    for (let i = 0; i < n; ++i)
    {
        const start = window.performance.now();
        process();
        const elapsed = window.performance.now() - start;
        total += elapsed / n;
    }

    console.log(total);
};

const fib = (i, n = i) => i > 0 ? fib(i - 1, n + i - 1) : n;
time(_=> fib(2000), 100);

呼ばれた回数だけ実行し平均値を計測

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment