使用lambdas解释此Scheme过程的复杂评估

时间:2017-12-13 23:19:12

标签: scope scheme racket evaluation r5rs

我想知道下面的代码如何评估为15。

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

我已经看了一段时间,似乎无法理解为什么评估不会导致错误。有人可以提供详细的逐步说明,如何评估为15?

1 个答案:

答案 0 :(得分:4)

如果你命名为lambdas,也许更容易看到发生了什么。例如,

(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