2012-09-03 30 views
5

我嘗試這個計劃的代碼轉換爲Javascript:爲什麼這段代碼不確定,但不是2?

(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.爲什麼?

回答

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

小錯誤:)應與回報的工作。

如果一個函數不返回任何東西,它實際上返回undefined。 在你的雙重函數中,你有一個函數返回「nothing」=>你得到了undefined。

7

您在double功能錯過return

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

這並不能解釋任何事情。這只是一個不同尋常的遊戲(或者在它被編輯之前) – Quentin

+0

@Quentin - 手動模式匹配是一種很好的技巧。 – ChaosPandion

+4

@ChaosPandion寫清楚的解釋是更好的技巧 – Alnitak

相關問題