2

リストをいくつかの関数に渡すことで、以下の 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

貢献してくれてありがとう。

4

1 に答える 1