问题标签 [free-variable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
substitution - lambda演算上下文中“自由变量”和“变量的自由出现”之间的区别
在 lambda 演算的上下文中,自由变量和自由出现的变量之间有什么区别吗?如果是,那么请用一两个例子来解释。实际上,我正在查看 lambda 表达式的转换规则,遇到以下行:
在说明转换规则时,符号
E[E'/V]
用于表示替换inE'
的每个自由出现的结果V
E
binding - Scheme中引用术语自由变量的绑定时间
我试图了解 Scheme 中的引用现象是如何工作的。特别是,我想了解引用术语的自由变量何时绑定。
例如,当我写
它返回 42。因此我推断绑定时间是在运行时。但是在这种情况下,为什么这段代码会失败
并返回
有人可以解释一下什么是引用术语的绑定时间模型(例如可以与 MetaOCaml 相媲美吗?(我不这么认为))以及定义和让之间的区别?
python - 如何从外部访问函数的自由变量
让我们考虑一下我们有一个这样的函数和一个内部函数(我们无法更改):
我们只获得一个函数'func',它是outer_f的调用版本,它对应于inner_f,如下所示:
在这种情况下,名为 'some_callable' 的变量是 int 类型,如果我们使用参数调用 func,我们会得到如下答案:
当我只有func函数实例(这意味着在调用 external_f之后)时,我想从函数外部访问some_callable。
如果我没记错的话,some_callable 是函数 inner_f (func.func_code.co_freevars) 的一个自由变量。我怎么知道 func 是用参数 int 调用的,只看 func 呢?
我无法使用检查模块或查看函数的属性来解决问题。使用跟踪模块调用 func 然后检查堆栈跟踪或使用 pdb 之类的方法似乎很有希望,但它们会是一种丑陋的 hack。
这个问题只是简化为从外部访问函数范围的自由变量。
那么我怎么知道自由变量'some_callable'是'int'而不执行func呢?
prolog - 复制带有变量的术语而不绑定变量
使用 SWI-Prolog。
如何在不绑定变量的情况下复制带有变量的术语?
我试过的
我试过copy_term/2和duplicate_term/2
例如:
结果是
并检查了分析和构建术语部分
我需要的
这En
是谓词返回我需要的结果
我希望有一个内置的谓词。
TL;博士
这需要解决二进制表达式。原文用于选择谓词和求解表达式。我称为本地的副本用于显示子表达式的重写,而我称为全局的副本用于显示应用于整个表达式的重写。如果只有一个术语,例如没有副本,一旦变量被绑定为一种用途,它会导致其他用途失败。
当前的解决方案是在谓词中输入具有不同变量的多个术语以用于每次使用。将其乘以数百到可能数千个可能存在键入或复制/粘贴错误的谓词,您就会看到需要。
其他注意事项
我还考虑在谓词中拥有该术语的主副本,然后使用它来制作三个副本。问题是其中一个副本用于选择谓词,因此在选择谓词之前必须进行副本。因此,即使未选择谓词进行评估,也必须在谓词中发生副本。
所以
copy_term/2
给了我一个带有谓词选择和评估部分所需的变量绑定的副本,
duplicate_term/2
给了我与其他谓词一起使用的自由变量的术语。
实际应用的示例输出
types - 返回 SML 中的自由(未绑定)变量列表
我创建了自己的数据类型:
使用这些,我需要编写一个函数 isFV,它返回传递给函数的任何自由变量的列表。到目前为止,我的代码是:
anaExp 意味着最初采用一个空列表并递归调用自身,直到它得到一个 VarExpr 项。然后它会将其添加到 aggr_list。
我如何应用 FuncExpr?我知道将 VarExpr 用作字符串类型,但我将什么用作 typ 类型?目前我有:
但是我们知道将 typ 传递给 anaExp 会导致类型错误(c 和 d)。
julia - 在 Julia 中销毁类型
我必须销毁 Julia 中的某些类型,如下所示:
我想要一个像
这将删除它。可能吗?
感谢您的回答。
prolog - Prolog 返回数字而不是单词
我试图通过变量返回一个值,A
例如loves
,但是我得到的结果_382
却是。
这是查询:?- checksyn(likes,Result).
我想Result
回来loves
,不是_628
。没有约束力吗?我不确定。
这是代码...
在此先感谢您的帮助:)
javascript - 对于完整代码或嵌套函数级别是否立即进行提升
嘿伙计们。我不明白关于吊装的一些事情,这可能是我的错,但我没有找到任何答案,无论是在这里还是在谷歌上,这就是我问的原因,感谢阅读。
所以我不明白,当 javascript 引擎在下面获取我的代码并开始扫描时,是否会抛出具有扫描的所有函数和嵌套函数的整个代码,直到最后一个范围?并且所有函数的创建阶段都将在第一次扫描时进行(或者换句话说,完整的代码是否会被扫描一次并为每个函数准备好一切)?
或者提升是逐层嵌套的?所以我的意思是首先将提升在全局上下文中定义的那些功能?然后当其中一个函数被调用并且它的执行上下文执行阶段开始时,它的嵌套函数会被提升吗?
我正在调查这个问题,因为我真的不了解嵌套函数是如何记住的,它是在哪个词法环境/函数中定义的,如果它至少没有被提升,它有一个 [[Scopes]] 属性,它保留它的范围链
问题是我到目前为止看到的所有文章,甚至 ecmascript 6 文档也只说,如果扫描仪满足函数定义a,那么会发生提升,然后范围属性将使用范围链和变量对象创建,参数对象和“this”关键字,但我没有找到任何可以谈论的材料,如果嵌套函数(保存在变量对象中,并在那里加上对其在内存中的函数体的引用)至少也会被提升(同时,他们的父函数被提升)并且他们得到一个作用域链来记住他们的外部环境,如果他们从那里被外部环境调用
非常感谢阅读我的大量文字,如果你能回答它或者如果你有一篇关于这方面以及提升的文章,我真的很感激
arrays - Python - 生成一个数组,其中元素是可变参数的函数,而无需每次都构建数组
TLDR:如何生成一个数组,其元素取决于某个任意(浮点)值 k,而不必在每次更改 k 的值时都从头开始构建数组的极其耗时的过程。
我想要实现的效果如下:
我在二维晶格(N x N numpy 数组)的原子基础上生成了一个巨大的哈密顿量。填充此数组需要针对我想要包含的每种不同耦合类型多次比较原子位点的位置 (xyz),随着系统规模的增长,这会变得非常耗时。(通常 N > 16,000 个站点)。
该数组的元素依赖于其他一些浮点类型变量 k(在程序的物理上下文中,这是一个我想要迭代的量子计数)。对于 1000 k 值的范围,我需要多次计算这个数组。
即生成256,000,000个元素的数组 1000 次...
目前,我每次更改为新的 k 值时都必须创建数组,这显然是非常低效的。这看起来(非常普遍)的基本结构如下:
这需要我每次调用整个构建过程。
我想知道是否有一种方法可以一次性生成这个数组,将 k 作为一个自由参数保留下来,以后可以填写。即返回一个数组,它是k 的函数。优先级是只需要构造一次数组,因为测试表明这占用了我总运行时间的很大一部分。
下面是我想通过对测试数组进行操作来实现的最小(非工作)示例。我想让哈密顿量成为一个对象变量,而不是每次都必须制作的方法,但对 k 有一定的依赖性(我意识到这在语法上将是灾难性的,但希望这将是一个好的开始答案)。
然后我将通过
提前致谢!
python - 在Python中被视为全局变量的自由变量?
在 Python 3.7 参考手册的执行模型部分,我阅读了以下语句:
该
global
语句与同一块中的名称绑定操作具有相同的范围。如果自由变量的最近封闭范围包含global
语句,则自由变量被视为全局变量。
所以我在 Python 解释器中输入了以下代码:
调用后,func1()
我预计x
全局范围内的值会更改为1
.
我做错了什么?