我们的编程语言练习考试中给出了以下问题,我很难理解它是如何工作的。有人能告诉我代码流程是什么吗?我已经在球拍中运行过它并且知道答案是什么。看起来第一个 lambda 函数将其他两个函数作为参数。但输入在哪里(lambda (x) 2)
and (lambda (y) 3)
传给?
(((lambda (x y) (x y))
(lambda (y) (lambda (y x) (x (x y))))
(lambda (x) (lambda (x y) (x (y x)))))
(lambda (x) 2)
(lambda (y) 3))
问题答案是3。
我们人类喜欢给事物命名。带有短名称的简洁符号使得在心理上操作代码变得很容易,因为我们的大部分心理能力都与我们的大规模并行视觉识别系统紧密相关:
(((lambda (x y) (x y))
(lambda (y) (lambda (y x) (x (x y))))
(lambda (x) (lambda (x y) (x (y x)))))
(lambda (x) 2)
(lambda (y) 3)) =>
((u where u = (lambda (x y) (x y))
f f = (lambda (y) (lambda (y x) (x (x y))))
g) g = (lambda (x) (lambda (x y) (x (y x))))
(lambda (x) 2)
(lambda (y) 3)) =>
((u where (u x y) = (x y)
f (f y) = \(y x) -> (x (x y)) ; (*)
g) (g x) = \(x y) -> (x (y x))
(lambda (x) 2)
(lambda (y) 3)) =>
((f where (f g) = \(y x) -> (x (x y))
g) (g x) = \(x y) -> (x (y x))
(lambda (x) 2)
(lambda (y) 3)) =>
(h where h = \(y x) -> (x (x y))
p p = \(x) -> 2
q) => q = \(y) -> 3
(h where (h y x) = (x (x y))
p (p x) = 2
q) => (q y) = 3
(q (q p)) where (p x) = 2
(q y) = 3
=>
(q 3) where (q y) = 3
=>
3
The (*)
定义包含所有变量bound在 lambda 表达式中(lambda (y x) (x (x y)))
- 两个都x
and y
。论点y
in (f y)
是这样ignored。它会被引用free多变的y
在 lambda 表达式中,但没有。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)