5

このSchemeコードをJavascriptに変換しようとしています。

(define (double f)
  (lambda (x) (f (f x))))
(define (inc x) (+ x 1))
((double inc) 0)

((double inc) 0)を意味する(inc (inc 0))ので、2を返します。

これは私のJavascriptコードです:

var double = function(f){
    return function(x) { f(f(x)); }
}
var inc = function(x) {return x+1;}
double(inc)(0);

しかしdouble(inc)(0)、2ではなく未定義を返します。なぜですか?

4

2 に答える 2

8
var double = function(f){
    return function(x) { return f(f(x)); }
}
var inc = function(x) {return x+1;}
double(inc)(0);

小さな間違い:)リターンで動作するはずです。

関数が何も返さない場合、実際には未定義を返します。double関数には、「nothing」を返す関数があります=>未定義になります。

于 2012-09-03T12:03:00.030 に答える
7

あなたは機能を逃しreturnましたdouble

    var double = function(f){
        return function(x) {return f(f(x)); }
    }
    var inc = function(x) {return x+1;}
    double(inc)(0);
于 2012-09-03T12:02:11.037 に答える