3

私が質問を表現した愚かな方法については申し訳ありませんが、ここにいくつかの説明があります.javascriptでラムダ計算を試していますが、いくつかの小さな問題があります. (私を助けるためにラムダ計算について何も知る必要はありません)

私はこの機能を持っています(教会の数字1 btw):

function num1(c) {
return function(x){
    return c(x);
}
 }

alert(num1)

期待どおりに動作し、上記とまったく同じ結果が得られます。

alert(num1(num1))

予期せぬ動作をし、以下を与えます:

function (x) {
    return c(x);
}

javascript が 'c' を関数 num1 に置き換えないのはなぜですか? しかし

alert(num1(num1)(num1))

与えます:

function (x) {
    return c(x);
}

そして、最初の c が、実際には想定どおりに関数に置き換えられたことを示しています。「c」が置き換えられなかった場合、次のようになります。

(num1(num1)(num1))=

(function (x) {return c(x);}(num1=

c(function num1(c) {
    return function(x){
        return c(x);
    }
})

全体として、コードは想定どおりに機能していますが、「c」が置き換えられた関数を出力していません。私に何ができる?後で、さらに関数を追加しますが、'c' が置き換えられないため、num1(asd)見分けることができなくなります。num1(jkl)

ご助力ありがとうございます!

だれも

4

1 に答える 1

1

これを試してみませんか:

function num1(c) {
   function rv(x){
    return c(x);
  }
   rv.showBinding = function() {
     return c;
   }

   return rv;

}

それで:

alert(num1);
alert(num1(num1).showBinding());
于 2012-09-13T18:52:26.937 に答える