代码之家  ›  专栏  ›  技术社区  ›  MastRofDsastR

使用lambdas解释此方案程序的复杂评估

  •  1
  • MastRofDsastR  · 技术社区  · 7 年前

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

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

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

    1 回复  |  直到 7 年前
        1
  •  4
  •   assefamaru    7 年前

    如果您将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