リストをいくつかの関数に渡すことで、以下の f を評価したい:
f = {z[1] z[2], z[2]^2};
a = % /. {z[1]-> #1,z[2]-> #2};
F[Z_] := Evaluate[a] & @@ Z ;
だから今、私が試してみるF[{1,2}]
と{2, 4}
、期待どおりになります。しかし、よく見る?F
と定義が返されます
F[Z_] := (Evaluate[a] &) @@ Z
これは の値に依存するa
ため、 を設定a=3
してから評価するF[{1,2}]
と、 が得られ3
ます。&
最後を追加すると保持されることは知っていEvaluate[a]
ますが、エレガントな回避策は何ですか? Evaluate[a]
基本的に、主に効率を改善するためにの評価を強制する必要がありますa
が、これは実際には非常に複雑です。
誰かが助けて、未知の計算によって与えられたものf
を含まなければならないことを考慮してください。Array[z,2]
だから書いている
F[Z_] := {Z[[1]]Z[[2]],Z[[2]]^2}
では不十分です。これを から自動的に生成する必要がありますf
。
貢献してくれてありがとう。