2012-09-03 30 views
5

tôi cố gắng để dịch mã Đề án này để javascript:Tại sao mã này nhận được không xác định nhưng không phải là 2?

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

((double inc) 0) nghĩa (inc (inc 0)), vì vậy nó sẽ trả về 2.

Đây là mã Javascript của tôi:

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

Nhưng double(inc)(0) lợi nhuận không xác định, không 2. Tại sao?

Trả lời

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

sai lầm nhỏ :) nên làm việc với sự trở lại.

Nếu hàm không trả về bất kỳ thứ gì, nó sẽ trả về không xác định. Trong chức năng kép của bạn, bạn có một hàm trả về "không có gì" => bạn nhận được không xác định.

7

Bạn bỏ lỡ return trong double chức năng:

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

Điều này không giải thích được gì. Nó chỉ là một trò chơi tại chỗ khác biệt (hoặc trước khi nó được chỉnh sửa) – Quentin

+0

@Quentin - So khớp mẫu thủ công là một kỹ năng tốt để có. – ChaosPandion

+4

@ChaosPandion viết giải thích rõ ràng là một kỹ năng tốt hơn để có – Alnitak

Các vấn đề liên quan