以下是不同語言的一些片段。語言之間遞歸處理的差異
功能double
問題來自SICP,前。 1.41。
Lisp語言:
(define (double f) (lambda (x) (f (f x))))
(define (inc x) (+ x 1))
(((double (double double)) inc) 5)
的Python:
def double(f):
def result(x):
return f(f(x))
return result
def inc(x):
return x + 1
double(double(double(inc)))(5)
的Javascript:
var double = function(f) {
return function(x) { return f(f(x)) };
};
var inc = function(x) { return x + 1 };
(double(double(double(inc))))(5);
紅寶石:
double = lambda {|f| lambda {|x| f[f[x]] } }
inc = lambda {|x| x+1 }
double[double[double[inc]]][5]
如果我不瘋狂,這些函數應該做同樣的事情並返回相同的結果。 但是,lisp版本會返回21,而其他版本會返回13.您能否向我解釋這種差異?我錯過了什麼嗎?
@ MichaelJ.Barber感謝,固定。 – Mark