Scheme中的以下代码返回什么

时间:2016-04-03 16:21:14

标签: lambda binding scheme

我试图理解为什么这个特定的方案代码返回36的值。我不明白这些变量是如何绑定的。

System.getProperties().put( "server.port", 80 );
SpringApplication.run(App.class, args);

如果有人可以提供对此代码的全面遍历,那么这对我的学习非常有帮助。谢谢。

1 个答案:

答案 0 :(得分:3)

使用替换原则来评估代码。让代码缩进很有用,因为你可以很容易地看到哪些表达式可以插入lambdas

(((lambda (fn) (lambda(x) (fn (fn x)))) (lambda (x) (* x 3))) 4)

首先,我们将(lambda (x) (* x 3))替换为fn

((lambda(x) ((lambda (x) (* x 3)) ((lambda (x) (* x 3)) x)))  4)

现在我们将4替换为最外面的x

((lambda (x) (* x 3)) ((lambda (x) (* x 3)) 4))

现在我们将4替换为右侧lambda的x

((lambda (x) (* x 3)) (* 4 3))

评估(* 4 3)

((lambda (x) (* x 3)) 12)

12替换为x

(* 12 3)

评估

36