Ily*_*lya 4 wolfram-mathematica substitution
我的问题是:为什么以下工作没有,我该如何解决?
Plot[f[t], {t, 0, 2*Pi}] /. {{f -> Sin}, {f -> Cos}}
Run Code Online (Sandbox Code Playgroud)
结果是两个空白图.通过比较,
DummyFunction[f[t], {t, 0, 2*Pi}] /. {{f -> Sin}, {f -> Cos}}
Run Code Online (Sandbox Code Playgroud)
给
{DummyFunction[Sin[t], {t, 0, 2 *Pi}], DummyFunction[Cos[t], {t, 0, 2 * Pi}]}
Run Code Online (Sandbox Code Playgroud)
如预期的.
这是我实际做的简化版本.我非常恼火,即使在找出令人讨厌的"正确方式"放置花括号之后也无济于事.
最后,我做了以下工作:
p[f_] := Plot[f[t], {t, 0, 2*Pi}]
p[Sin]
p[Cos]
Run Code Online (Sandbox Code Playgroud)
作为彼得Hold/ ReleaseHold策略的替代品你可以做到
Plot[Evaluate[ f[t]/. {{f -> Sin}, {f -> Cos}} ], {t, 0, 2*Pi}]
Run Code Online (Sandbox Code Playgroud)
这是一个更清洁的阅读.这确保f在Plot评估之前替换.
Mathematica 正在尝试在替换之前评估 Plot。您可以使用 Hold 和 ReleaseHold 函数来防止这种情况:
ReleaseHold[Hold[Plot[f[t],{t,0,2*Pi}]] /. {{f -> Sin},{f -> Cos}}]
Run Code Online (Sandbox Code Playgroud)
Hold[] 将强制整个 Plot 子表达式在执行替换时保持未简化状态,然后 ReleaseHold[] 将让它继续实际绘图。