2012-09-03 10 views
5

私はJavaScriptにこのSchemeコードを翻訳してみてください。このコードはなぜ定義されていませんが、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.なぜですか?あなたはdouble機能でreturnを逃した

答えて

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

小さなミスは:)リターンで動作するはずです。

関数が何も返さない場合、実際にはundefinedを返します。 二重関数では、 "nothing" =>を返す関数があります。

7

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

関連する問題