Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica 请解释With、Block和Module的这种行为_Wolfram Mathematica - Fatal编程技术网

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

Wolfram mathematica 请解释With、Block和Module的这种行为,wolfram-mathematica,Wolfram Mathematica,你好 我对此有点困惑: 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]将给出:{

你好

我对此有点困惑:

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仅在expr中的符号不作为作用域构造中的局部变量出现时才替换这些符号

模块和块根本不打算这么做

编辑详细说明
模块
`未替换符号的原因是未对其进行求值。块和模块不执行语法替换操作。试一试

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]}

这是否适用于
模块
?从文件中看不清楚。