5

我尝试将此方案代码翻译成 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);

小错误:) 应该与返回一起工作。

如果一个函数没有返回任何东西,它实际上返回的是未定义的。在您的双重功能中,您有一个返回“无”的功能=>您未定义。

于 2012-09-03T12:03:00.030 回答
7

你错过returndouble功能:

    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 回答