An5Drama Asked: 2024-08-24 17:40:36 +0800 CST2024-08-24 17:40:36 +0800 CST 2024-08-24 17:40:36 +0800 CST MIT-Scheme 中父环境和子环境的关系是怎样的? 772 当我们调用顶级环境的父级在(environment-lookup system-global-environment name)哪里时,它是否也会在其子环境中查找?system-global-environment 从文档上看,它们似乎是分开的。如果是这样,为什么我们在这里定义父环境? 本节中的操作允许您单独检查特定环境与其父环境的绑定,从而揭示环境的框架结构。 Ps:SO 中是否有适合env此问题的标签?(此处的建议environment-variables不合适。) scheme 1 个回答 Voted Best Answer Dúthomhas 2024-08-24T18:41:24+08:002024-08-24T18:41:24+08:00 文档说name在参数环境或祖先中发现了。 因此,不,不检查子环境。 这遵循了最小意外原则。查找变量名时,您不应该在当前范围(或上下文)以下的本地环境中查找内容。 例如,如果您有一个全局变量x和一个带有本地变量的函数(或任何 lambda)x,那么除了函数代码之外的任何内容是否都应该能够找到并使用本地变量x(禁止自省功能)? 不,当然不是。在全局上下文中查找变量,您应该只查找全局变量。 但是如果您在本地上下文中查找变量,如果在那里找不到它,您还应该在其父上下文中查找,并继续查找,直到找到该变量或我们用完了环境(全局环境是当前范围内的最后或最顶层环境)。
文档说
name
在参数环境或祖先中发现了。因此,不,不检查子环境。
这遵循了最小意外原则。查找变量名时,您不应该在当前范围(或上下文)以下的本地环境中查找内容。
例如,如果您有一个全局变量
x
和一个带有本地变量的函数(或任何 lambda)x
,那么除了函数代码之外的任何内容是否都应该能够找到并使用本地变量x
(禁止自省功能)?不,当然不是。在全局上下文中查找变量,您应该只查找全局变量。
但是如果您在本地上下文中查找变量,如果在那里找不到它,您还应该在其父上下文中查找,并继续查找,直到找到该变量或我们用完了环境(全局环境是当前范围内的最后或最顶层环境)。