gpt4 book ai didi

wolfram-mathematica - 如何在不评估符号的情况下阻止符号?

转载 作者:行者123 更新时间:2023-12-03 23:15:11 25 4
gpt4 key购买 nike

假设我有 Symbol 的名称列表年代:

f1 := Print["f1 is evaluated!"];
list = {"f1", "f2"};
Block 的明显方法这些 Symbol s 导致对它们的评估:
In[19]:= With[{list=Symbol/@list},Block[list,f1//ToString]]
During evaluation of In[19]:= f1 is evaluated!
During evaluation of In[19]:= f1 is evaluated!
Out[19]= Null

但如果没有评估,我们可以 Block他们没有任何问题:
In[20]:= Block[{f1, f2}, f1 // ToString]
Out[20]= "f1"

是否可以将此列表注入(inject) Block未评估 Symbol 的范围年代?

最佳答案

这是执行此操作的另一种技术:

SetAttributes[blockAlt,HoldRest];
blockAlt[s : {__String}, body_] :=
Replace[Join @@ ToHeldExpression[s], Hold[x__] :> Block[{x}, body]]

由于规则的破坏性,我们在这里保存纯函数(它们不尊重其他范围构造,包括它们自己)

编辑

还有另一种选择(甚至更短):
SetAttributes[blockAlt1, HoldRest];
blockAlt1[s : {__String}, body_] :=
Block @@ Append[ToHeldExpression@ToString[s], Unevaluated[body]]

关于wolfram-mathematica - 如何在不评估符号的情况下阻止符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6234701/

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