以下是一些不同语言的片段.
double有问题的功能来自SICP,例如.1.41.
Lisp的:
(define (double f) (lambda (x) (f (f x))))
(define (inc x) (+ x 1))
(((double (double double)) inc) 5)
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
def double(f):
def result(x):
return f(f(x))
return result
def inc(x):
return x + 1
double(double(double(inc)))(5)
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
var double = function(f) {
return function(x) { return f(f(x)) };
};
var inc = function(x) { return x + 1 };
(double(double(double(inc))))(5);
Run Code Online (Sandbox Code Playgroud)
红宝石:
double = lambda {|f| lambda {|x| f[f[x]] } }
inc = lambda {|x| x+1 }
double[double[double[inc]]][5] …Run Code Online (Sandbox Code Playgroud)