小编Mar*_*ark的帖子

语言之间递归处理的差异

以下是一些不同语言的片段.

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)

javascript ruby lisp python recursion

3
推荐指数
1
解决办法
175
查看次数

标签 统计

javascript ×1

lisp ×1

python ×1

recursion ×1

ruby ×1