gpt4 book ai didi

wolfram-mathematica - 结合使用 `With`和 `Rules`列表-但不影响 `With`的正常行为

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

说我有一个Rules列表

rules = {a -> b, c -> d};

我在整个笔记本中使用。然后,在某一点上,在表达式中进行任何其他评估之前,希望规则应用 是有意义的。通常,如果您想要这样的东西,您可以使用
In[2]:= With[{a=b,c=d}, expr[a,b,c,d]]
Out[2]= expr[b, b, d, d]

如何获取rules并将其插入With的第一个参数中?

编辑

BothSome解决方案都无法完成我一直在寻找的一切-但我应该再强调一点。参见上面的粗体部分。

例如,让我们看一下
rules = {a -> {1, 2}, c -> 1};

如果我在With中使用这些值,我会得到
In[10]:= With[{a={1,2},c=1}, Head/@{a,c}]
Out[10]= {List,Integer}

某些版本的WithRules产生
In[11]:= WithRules[rules, Head/@{a,c}]
Out[11]= {Symbol, Symbol}

(实际上是,我没有注意到Andrew的答案具有HoldRest属性-因此它的工作方式与我想要的一样。)

最佳答案

您想使用Hold来构建With语句。这是一种方法;可能更简单:

In[1]:= SetAttributes[WithRules, HoldRest]

In[2]:= WithRules[rules_, expr_] :=
With @@ Append[Apply[Set, Hold@rules, {2}], Unevaluated[expr]]

测试一下:
In[3]:= f[args___] := Print[{args}]

In[4]:= rules = {a -> b, c -> d};

In[5]:= WithRules[rules, f[a, c]]

During evaluation of In[5]:= {b,d}

(我使用了Print,以便使任何涉及我不小心过早评估expr的错误都变得显而易见。)

关于wolfram-mathematica - 结合使用 `With`和 `Rules`列表-但不影响 `With`的正常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5188875/

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