2012-09-03 14 views
5

cerco di tradurre questo codice Scheme a JavaScript:Perché questo codice non è definito ma non 2?

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

((double inc) 0) significa (inc (inc 0)), quindi restituisce 2.

Questo è il mio codice Javascript:

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

Ma double(inc)(0) rendimenti indefinito, non 2. Perché?

risposta

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

piccolo errore :) dovrebbe funzionare con il ritorno.

Se una funzione non restituisce nulla, in realtà restituisce un valore non definito. Nella tua doppia funzione hai una funzione che restituisce "nulla" => non hai definito.

7

vi siete persi return in double funzione:

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

Questo non spiega nulla. È solo un gioco di spot-the-difference (o lo era prima che fosse modificato) – Quentin

+0

@Quentin - La corrispondenza del pattern manuale è una buona abilità da avere. – ChaosPandion

+4

@ChaosPandion scrivere spiegazioni chiare è una competenza migliore da avere – Alnitak

Problemi correlati