使用 lambdas 对这个 Scheme 过程的复杂评估的解释

Explanation of complex evaluation for this Scheme procedure using lambdas

我想知道以下代码如何计算为 15。

((lambda(x y) (+ (x * y) (x + y))) (lambda (a b) (a b b)) 3)

我看了一段时间,似乎无法理解为什么评估没有导致错误。有人可以提供有关如何计算为 15 的详细分步说明吗?

如果您命名 lambda 表达式,也许更容易看出发生了什么。例如,

(define (f x y)
  (+ (x * y) (x + y)))

(define (g a b)
  (a b b))

则表达式((lambda (x y) (+ (x * y) (x + y))) (lambda (a b) (a b b)) 3)变为:

(f g 3)

它的计算结果为:

(f g 3)
=> (+ (g * 3) (g + 3))
=> (+ (* 3 3) (+ 3 3))
=> (+ 9 6)
=> 15