dan*_*nny 4 lambda scheme racket
我们的编程语言实践考试中给出了以下问题,我很难理解其工作原理.有人能告诉我代码流是什么吗?我用球拍跑了,知道答案是什么.看起来第一个lambda函数将另外两个函数作为参数.但那么输入在哪里 (lambda (x) 2)并(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
Run Code Online (Sandbox Code Playgroud)
该(*)定义包含lambda表达式中绑定的所有变量(lambda (y x) (x (x y)))- both x和y.这个论点y在(f y)这样的忽略.它将由lambda表达式中的自由变量引用y,但没有.