Scheme中的多个Lambda嵌套?

Kur*_*son 0 lambda scheme nested

任何人都可以向我解释这个Scheme中的表达式如何返回100?

   (((lambda (f) ((lambda (g) (lambda (h) (f (g (h 4))))) double)) square) inc)
Run Code Online (Sandbox Code Playgroud)

我知道它以某种方式分解为"(2*(4 + 1))^ 2",但对于我的生活,我无法弄清楚如何.

这是针对类似问题的考试.其中大约有6或7个,我们必须在大约1或2分钟内找到答案(因为它们只是测试的一部分).除了努力学习之外,我们的教授没有提供任何帮助,但我完全不知道如何做到这些,更不用说快速了.

任何帮助将不胜感激!谢谢.

Ósc*_*pez 5

让我们一步一步 - 注意一个好的缩进如何让一切变得更容易理解!

(((lambda (f)      ; call outermost lambda, f is bound to square
    ((lambda (g)   ; call mid lambda, g is bound to double
       (lambda (h) ; return lambda, h is unbound
         (f (g (h 4)))))
     double))
  square)
 inc)
Run Code Online (Sandbox Code Playgroud)

上面的表达式已经简化为:

((lambda (h)
  (square (double (h 4))))
 inc)
Run Code Online (Sandbox Code Playgroud)

现在我们最后调用last lambda,并且h绑定inc,导致以下表达式:

(square (double (inc 4)))
=> 100
Run Code Online (Sandbox Code Playgroud)