gpt4 book ai didi

wolfram-mathematica - 请解释 With、Block 和 Module 的这种行为

转载 作者:行者123 更新时间:2023-12-04 08:09:46 24 4
gpt4 key购买 nike

再会,

我对此有点困惑:

In[1]:= f[x_]:=With[{xx=x},f[xx_]:=ff[xx]]
DownValues[f]
f[1]
DownValues[f]
Out[2]= {HoldPattern[f[x_]]:>With[{xx=x},f[xx_]:=ff[xx]]}
Out[4]= {HoldPattern[f[xx_]]:>ff[xx]}

如果我使用 Block,也会发生同样的情况或 Module而不是 With .

没想到最后 DownValues[f]会给: {HoldPattern[f[x_]]:>ff[x]} .但事实并非如此。请解释。

最佳答案

来自 With 的文档.

With replaces symbols in expr only when they do not occur as local variables inside scoping constructs.



Module 和 Block 根本不打算这样做。

编辑 详解 ModuleBlock . `符号没有被替换的原因是它没有被评估。 Block 和 Module 不做句法替换操作。尝试
f[x_] := Block[{xx = x}, f[xx_] = ff[xx]]

然后评估 f[z] .

或者,您可以首先使用非作用域构造来执行初始策略:
f[x_] := With[{xx = x}, 
Hold[{f[xx_], ff[xx]}] /. {Hold[{a_, b_}] :> SetDelayed[a, b]}]

In[117]:= DownValues[f]

Out[117]= {HoldPattern[f[x_]] :>
With[{xx = x},
Hold[{f[xx_], ff[xx]}] /. {Hold[{a_, b_}] :> (a := b)}]}

In[118]:= f[z]

In[119]:= DownValues[f]

Out[119]= {HoldPattern[f[z_]] :> ff[z]}

关于wolfram-mathematica - 请解释 With、Block 和 Module 的这种行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5245896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com