Ma question est: pourquoi ce qui suit ne fonctionne pas, et comment puis-je le réparer?Comportement bizarre de substitution dans Mathematica
Plot[f[t], {t, 0, 2*Pi}] /. {{f -> Sin}, {f -> Cos}}
Le résultat est deux graphes vierges. Par comparaison,
DummyFunction[f[t], {t, 0, 2*Pi}] /. {{f -> Sin}, {f -> Cos}}
donne
{DummyFunction[Sin[t], {t, 0, 2 *Pi}], DummyFunction[Cos[t], {t, 0, 2 * Pi}]}
comme vous le souhaitez.
Ceci est une version simplifiée de ce que je faisais réellement. J'ai été très ennuyé que, même après avoir compris la «bonne façon» de mettre les accolades ne fonctionne rien.
En fin de compte, je l'ai fait ce qui suit, qui fonctionne:
p[f_] := Plot[f[t], {t, 0, 2*Pi}]
p[Sin]
p[Cos]
Merci pour votre réponse. Votre solution a une faute de frappe, vous devriez avoir /. au lieu du premier ->. Ça marche. Cependant, cela n'a pas beaucoup de sens pour moi que la substitution ne soit pas en haut de l'ordre de préséance ... – Ilya
(La faute de frappe est maintenant fixée par Ramasalanka) – Ilya
Je ne peux pas expliquer pourquoi l'ordre des opérations est la manière est, mais ce n'est pas juste complot. Mathematica essayera d'évaluer n'importe quelle fonction du côté gauche de /. (désolé de la faute de frappe plus tôt) avant qu'il effectue la substitution. Une grande partie du temps n'a pas d'importance: le f [t] non défini sera simplement transmis à travers la définition de la fonction jusqu'à ce que la substitution soit effectuée. Par exemple, myFun [x_, l_]: = x/@ l; myFun [f, {1,2,3}] /. {{f-> Sin}, {f-> Cos}} fonctionnera comme vous le souhaitez. Mais Plot [] est l'un des exemples où avoir f [t] indéfini entraînera une erreur immédiate. –