方案中的嵌套Lambda?
在方案中评估方案中的嵌套Lambda?,lambda,nested,scheme,racket,evaluation,Lambda,Nested,Scheme,Racket,Evaluation,在方案中评估((λ(xy)(λ(x)(*xy)))5 6)10) 我不知道该怎么做 ((lambda (x y) (+ x x y)) 3 5) 这相当简单。这里x=3,y=5 但在这里,主体是:(lambda(x)(*xy)))56,参数是10 那么我们单独评估?在(lambda(x)(*xy)))56=(*5y)中,然后((lambda(xy)(lambda(x)(*xy)))56)10=((lambda(xy)(*5y)10)) 但是如何计算呢?让我们从(lambda(xy)(lambd
((λ(xy)(λ(x)(*xy)))5 6)10)
我不知道该怎么做
((lambda (x y) (+ x x y)) 3 5)
这相当简单。这里x=3,y=5
但在这里,主体是:(lambda(x)(*xy)))56
,参数是10
那么我们单独评估?在(lambda(x)(*xy)))56=(*5y)
中,然后((lambda(xy)(lambda(x)(*xy)))56)10=((lambda(xy)(*5y)10))
但是如何计算呢?让我们从(lambda(xy)(lambda(x)(*xy)))
开始。这是一个函数表达式,它接受两个参数并返回另一个函数表达式。为了方便起见,我将整个表达式称为f
现在考虑<代码>(F 5 6)< /代码>。它返回另一个lambda,<代码>(lambda(x)(*x y)< /> >,y y绑定到传入的值。但是,内部<代码> x < /代码>参数将外部参数隐藏,因此结果是<代码>(f 5 6)=(lambda(x)(*x 6)< /c> > /p>
从这里,我们可以直接计算
((lambda(x)(*x 6))10)
。这将产生60
的最终结果。如果重命名内部lambda中的参数,会更容易:
(((lambda (x y) (lambda (z) (* z y))) 5 6) 10)
(((lambda (x y) (lambda (x) (* x y))) 5 6) 10)
外部lambda应用于5和6:
((lambda (x y) (lambda (z) (* z y))) 5 6)
这评估为
(lambda (z) (* z 6))
因为y
绑定到6
请注意,从不使用外部lambda(绑定到
5
)的x
然后应用此函数
((lambda (z) (* z 6)) 10)
这将产生60
(((lambda (x y) (lambda (x) (* x y))) 5 6) 10)
是
是
请参阅?将外部lambda应用于参数5和6后,内部lambda将作为值返回。新值包含在其定义环境中,其中x=5
和y=6
——此类lambda也称为闭包:
然后将其应用于10:
(((lambda (x y) (lambda (x) (* x y))) 5 6) 10)
= ( (let ((x 5)
(y 6))
(lambda (x) (* x y)))
10)
= (let ((x 5)
(y 6))
( (lambda (x) (* x y))
10))
= (let ((x 5)
(y 6))
(let ((x 10))
(* x y)))
= (* 10 6)
= 60
否。10适用于((λ(x y)…)5 6)的结果。请仔细查看括号(或使用可以显示匹配参数的编辑器)。请不要完全更改您的问题。这会使人们花时间编写的答案无效。如果您有新问题,请提出新问题。