我的问题是:为什么不做以下工作,以及如何解决?Mathematica中替换的奇怪行为
Plot[f[t], {t, 0, 2*Pi}] /. {{f -> Sin}, {f -> Cos}}
结果是两个空白图。通过比较,如所期望
DummyFunction[f[t], {t, 0, 2*Pi}] /. {{f -> Sin}, {f -> Cos}}
给出
{DummyFunction[Sin[t], {t, 0, 2 *Pi}], DummyFunction[Cos[t], {t, 0, 2 * Pi}]}
。
这是什么我实际上做一个简化版本。我非常恼火,即使在弄清楚把花括号放在哪里的烦人的“正确方法”都没有用。
最后,我做了以下,其工作方式:
p[f_] := Plot[f[t], {t, 0, 2*Pi}]
p[Sin]
p[Cos]
谢谢您的回答。你的解决方案有一个错字,你应该有/。而不是第一个 - >。有用。然而,对我而言,为什么替代不会处于优先顺序的顶部...... – Ilya 2010-03-22 02:52:03
(这个错字现在由Ramasalanka修复) – Ilya 2010-03-22 02:54:56
我无法解释为什么操作的顺序是它的方式是,但它不只是剧情。 Mathematica将尝试评估/左侧的任何函数。 (对于错字较早),然后再执行替换。很多时间无关紧要:未定义的f [t]将通过函数定义进行,直到执行替换。例如,myFun [x_,l_]:= x/@ l; myFun [f,{1,2,3}] /。 {{f-> Sin},{f-> Cos}}会像你期望的那样工作。但Plot []是未定义f [t]将导致立即错误的示例之一。 – 2010-03-22 02:59:04