任何人都可以向我解释这个Scheme中的表达式如何返回100?
(((lambda (f) ((lambda (g) (lambda (h) (f (g (h 4))))) double)) square) inc)
我知道它以某种方式分解为"(2*(4 + 1))^ 2",但对于我的生活,我无法弄清楚如何.
这是针对类似问题的考试.其中大约有6或7个,我们必须在大约1或2分钟内找到答案(因为它们只是测试的一部分).除了努力学习之外,我们的教授没有提供任何帮助,但我完全不知道如何做到这些,更不用说快速了.
任何帮助将不胜感激!谢谢.
让我们一步一步 - 注意一个好的缩进如何让一切变得更容易理解!
(((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)
上面的表达式已经简化为:
((lambda (h) (square (double (h 4)))) inc)
现在我们最后调用last lambda
,并且h
绑定inc
,导致以下表达式:
(square (double (inc 4))) => 100