【发布时间】:2018-05-27 23:11:36
【问题描述】:
我想知道以下代码如何计算为 15。
((lambda(x y) (+ (x * y) (x + y))) (lambda (a b) (a b b)) 3)
我已经看了一段时间,似乎无法理解为什么评估不会导致错误。有人可以提供有关如何评估为 15 的详细分步说明吗?
【问题讨论】:
标签: scope scheme racket evaluation r5rs
我想知道以下代码如何计算为 15。
((lambda(x y) (+ (x * y) (x + y))) (lambda (a b) (a b b)) 3)
我已经看了一段时间,似乎无法理解为什么评估不会导致错误。有人可以提供有关如何评估为 15 的详细分步说明吗?
【问题讨论】:
标签: scope scheme racket evaluation r5rs
如果您命名 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
【讨论】: