JavaScriptでは、新しい関数を生成するために f と g の 2 つの関数を受け取る関数を使用して、関数合成を定義できます。
function o(f, g) {
return function(x) {
return f(g(x));
}
}
これは明らかなようですが、私の質問は、ランタイム インタープリター/コンパイラーが実際にf(g(x)) を計算するかどうかです。
多くの要素を持つ配列のような大きなデータがあり、前の計算によってf(g(x))として以前に構成された関数 o は、構成されていない f(g(x ) )よりも高速であるとしますか?
おそらく、この場合、f(g(x))の単なるマクロ表現としてのo(f, g ) ?
で、マクロなら性能はあまり変わらないかも?
実行環境にもよるかもしれませんが、特にChrome/node.jsのV8エンジンに興味があります。
遅延評価戦略の言語としての Haskell は、理論的には関数を構成しますが、私は正しいですか? GHCは実際に計算して関数を構成しますか?