替代模型是否适用于闭包?或者你需要一个环境模型?
Does the substitution model work for closures? Or do you need an environment model?
例如。假设这是我们的 JavaScript 代码:
let a = x => {
let y = x * 2
return z => x + y + z
}
let b = a(1)
let c = b(2)
我可以使用替代模型对此进行评估,还是需要环境模型?
我是这样开始的:
let c = ((x => {
let y = x * 2
return z => x + y + z
})(1))(2)
但是我需要先计算内部表达式(使用 1
调用),然后才能计算外部表达式(使用 2
调用)。但对于替换,它总是由外而内。
这是否表明这里的替代模型不合适?或者从内到外和从外到内进行评估是否符合犹太洁食标准?还是有其他的方式来看待它?
替换模型适用于闭包。基本上,您将绑定替换为其绑定值。您不需要环境模型。
const b = a(1) // ==
const b = z => 1 + (1 * 2) + z
const c = b(2) // ==
const c = 1 + (1 * 2) + 2 // ==
const c = 5
仅当您确实需要在需要环境模型的地方使用let
(如果您实际重新绑定它)。
当谈到评估顺序时,很明显在像 a(1)(2)
这样的两个调用中,你不能先用参数 2
进行第二次调用,因为它是在 [=15= 的结果上调用的].因此,您需要知道 a(1)
的结果,因此您需要先替换它,然后再对该结果进行下一次调用。
let c = (x => {
let y = x * 2
return z => x + y + z
})(1)(2)
// substituting 1 for x ==>
let c = (z => 1 + 2 + z)(2)
// substituting 2 for z ==>
let c = 1 + 2 + 2
例如。假设这是我们的 JavaScript 代码:
let a = x => {
let y = x * 2
return z => x + y + z
}
let b = a(1)
let c = b(2)
我可以使用替代模型对此进行评估,还是需要环境模型?
我是这样开始的:
let c = ((x => {
let y = x * 2
return z => x + y + z
})(1))(2)
但是我需要先计算内部表达式(使用 1
调用),然后才能计算外部表达式(使用 2
调用)。但对于替换,它总是由外而内。
这是否表明这里的替代模型不合适?或者从内到外和从外到内进行评估是否符合犹太洁食标准?还是有其他的方式来看待它?
替换模型适用于闭包。基本上,您将绑定替换为其绑定值。您不需要环境模型。
const b = a(1) // ==
const b = z => 1 + (1 * 2) + z
const c = b(2) // ==
const c = 1 + (1 * 2) + 2 // ==
const c = 5
仅当您确实需要在需要环境模型的地方使用let
(如果您实际重新绑定它)。
当谈到评估顺序时,很明显在像 a(1)(2)
这样的两个调用中,你不能先用参数 2
进行第二次调用,因为它是在 [=15= 的结果上调用的].因此,您需要知道 a(1)
的结果,因此您需要先替换它,然后再对该结果进行下一次调用。
let c = (x => {
let y = x * 2
return z => x + y + z
})(1)(2)
// substituting 1 for x ==>
let c = (z => 1 + 2 + z)(2)
// substituting 2 for z ==>
let c = 1 + 2 + 2