2012-09-03 8 views
5

Ben Javascript bu Şema kodunu çevirmek deneyin:Bu kod neden tanımsız, ancak 2 değil?

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

((double inc) 0)(inc (inc 0)) demektir, bu nedenle döndürür 2.

Bu benim JavaScript kodu:

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

Ama double(inc)(0) döner tanımlanmamış, değil 2. Neden?

cevap

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

Küçük hata :) dönüşü ile birlikte çalışmalıdır.

Bir işlev hiçbir şey döndürmezse, aslında tanımsız olarak döner. Çift işlevinizde "hiçbir şey" döndüren bir işlev var => tanımlanmamış olsun.

7

Sen double işlevinde return cevapsız:

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

Bu hiçbir şeyi açıklamıyor. Bu sadece bir fark-nokta oyunu (veya düzenlenmeden önce) – Quentin

+0

@Quentin - Manuel desen eşleştirme sahip olmak için iyi bir beceridir. – ChaosPandion

+4

@ChaosPandion açık açıklamalar yazmanın daha iyi bir beceri olduğunu – Alnitak