(DEFINE AVERAGE-DAMP
(LAMBDA f
(LAMBDA x (AVERAGE (f x) x))))
これについて注意が必要なのは、関数がここで渡されていることです。
average-dampは、( "f of x")との平均として定義されるf
関数として定義される関数です。x
f(x)
x
つまり、average-dampは、別の関数を受け入れ、その関数をラップしてから、この新しい関数を返す関数です。
万が一JavaScriptに精通している場合は、次のことが役立つ場合があります。
function average(a, b) {
return (a + b)/2;
}
function averageDamp(f) {
return function(x) {
return average(f(x), x);
}
}
では、次のことを考えてみてください。
var something = averageDamp(function (c) { return c * 2 });
something
は、1つのパラメーター、を取りx
、x*2とxの平均を返す関数です。
言い換えれば、それは次のようなものです:
function (x) {
return average(x * 2, x);
}
あなたが持っていた場合:
var something = averageDamp(function (c) { return c * 2 });
something(5); //average(5*2, 5) = (10 + 5) / 2
関数を関数内にラップすることは、lispスニペットで起こっていることです。
編集:好奇心から、JavaScriptで固定小数点平方根アプローチを完全に実装しました:http://jsfiddle.net/tXDQL/。