gpt4 book ai didi

compiler-construction - 使用 Mathematica 理解编译器优化 : accessing definitions created using SetDelayed?

转载 作者:行者123 更新时间:2023-12-01 01:32:08 25 4
gpt4 key购买 nike

最近,我对更好地理解编译器后端所做的优化感兴趣。我认为使用 Mathematica 来探索这一点可能会有所帮助,因为它使创建、显示和操作语法树变得非常容易。

我想我会从简单的开始,看看不断的传播。所以我写了一个简单的函数,并尝试查看语法树。

f2[x_, y_] := Module[{temp1},
temp1 = 5;
Return[(x + temp1)*y];
]
FullForm[f2]

然而,FullForm[f2] 的结果只是 f2。我知道这个表达式的右侧必须存储在 Mathematica 中的某个地方,所以我的问题是它在哪里,是否可以在使用 SetDelayed 运算符“:=”创建此规则后修改它?

与此同时,我发现我可以使用函数符号来实现我的目标,但我仍然想了解 Mathematica 做得更好一点。
f1 = Function[{x, y}, Module[{temp1},
temp1 = 5;
Return[(x + temp1)*y]
]
]
TreeForm[f1]

alt text

最佳答案

SetSetDelayed带模式的定义产生所谓的向下值定义,可以通过 DownValues 访问。 :

In[98]:= DownValues[f2]
Out[98]= {HoldPattern[f2[x_, y_]] :>
Module[{temp1}, temp1 = 5; Return[(x + temp1) y];]}

您甚至可以分配回 DownValues[f2] :
In[103]:= 
DownValues[
f2] = {HoldPattern[f2[x_, y_]] :>
Module[{temp1}, temp1 = 1234; Return[(x + temp1) y]]};


In[104]:= f2[1, 2]
Out[104]= 2470

简单的赋值产生可以通过 OwnValues 访问和操作的自值定义。 :
In[107]:= g=7;

In[108]:= OwnValues[g]
Out[108]= {HoldPattern[g]:>7}

Here's a tutorial有关值列表的更多信息。

哼!

关于compiler-construction - 使用 Mathematica 理解编译器优化 : accessing definitions created using SetDelayed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4113916/

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