2012-09-03 15 views
5

Ich versuche, dieses Schema Code Javascript zu übersetzen:Warum wird dieser Code nicht definiert, aber nicht 2?

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

((double inc) 0) bedeutet (inc (inc 0)), so kehrt 2.

Dies ist mein Javascript-Code:

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

Aber double(inc)(0) kehrt undefiniert, nicht 2. Warum?

Antwort

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

Kleine Fehler :) sollte mit der Rückkehr arbeiten.

Wenn eine Funktion nichts zurückgibt, wird sie nicht definiert zurückgegeben. In Ihrer Doppelfunktion haben Sie eine Funktion, die "nichts" zurückgibt => Sie erhalten undefiniert.

7

Sie verfehlten return in double Funktion:

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

Dies erklärt nichts. Es ist nur ein Spiel von Spot-the-Unterschied (oder war, bevor es bearbeitet wurde) – Quentin

+0

@Quentin - Manuelle Mustererkennung ist eine gute Fähigkeit zu haben. – ChaosPandion

+4

@ChaosPandion klare Erklärungen zu schreiben ist eine bessere Fähigkeit zu haben – Alnitak

Verwandte Themen