2012-09-03 27 views
5

trato de traducir el código Esquema de Javascript:¿Por qué este código no se define pero no 2?

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

((double inc) 0) significa (inc (inc 0)), por lo que devuelve 2.

Este es mi código Javascript:

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

Pero double(inc)(0) vuelve indefinido, no 2. ¿Por qué?

Respuesta

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

pequeño error :) debe trabajar con el retorno.

Si una función no devuelve nada, en realidad devuelve indefinido. En su función doble tiene una función que devuelve "nada" => no se define.

7

se ha perdido el return en double función:

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

Esto no explica nada. Es solo un juego de detectar la diferencia (o fue antes de ser editado) – Quentin

+0

@Quentin - La coincidencia manual de patrones es una buena habilidad. – ChaosPandion

+4

@ChaosPandion escribir explicaciones claras es una mejor habilidad para tener – Alnitak

Cuestiones relacionadas