2012-02-18 3 views
3

を評価しない:Mathematicaは、私は2つのオブジェクト定義された#1

f=x^2 
g=x->#1 

なぜこのん:

25 

しかし、この:

f /. x -> #1 &[5] 

は私に期待される結果を与えるが

f /. g &[5] 

は私を与える:

#1^2 

#1が助けてください5 に評価されなかったかのように。

+3

Mathematicaで頻繁に使用されるように、式を[]にラップし、出力を調べるのは参考になります。おかげさまで –

+0

しかし、予想通りに間違った結果をもたらす声明をどのように修正することができますか?私はMathematicaの初心者なので、ほとんどのことは分かりません。 – user1161552

答えて

2

純粋な機能コンポーネントを一緒に保つことで機能させることができます。

f = x^2 
g = x -> #1 & 

f/. g[5] 

マッピングする前に機能を形成し、リスト上でそれを実行します。

f = x^2 
g = x -> #1 
list = {1, 2, 3, 4, 5}; 
b = Block[{a}, Function[f /. a] /. a -> g] 
Map[b, list] 

{1、4、9、16、25}

やコメントに特定の問題のために...

vars = {x, y}; 
f = x + y; 
g = Table[vars[[i]] -> Slot[i], {i, 1, Length[vars]}]; 
b = Block[{a}, Function[f /. a] /. a -> g]; 
list = {{1, 2}, {3, 4}, {5, 6}}; 
Map[b[Sequence @@ #] &, list] 

{3、7、11}

Mr. Wizardの答えで、これは次のようになります:

vars = {x, y}; 
f = x + y; 
g = Table[vars[[i]] -> Slot[i], {i, 1, Length[vars]}]; 
list = {{1, 2}, {3, 4}, {5, 6}}; 
Map[Evaluate[f /. g] &[Sequence @@ #] &, list] 

Attributes[Function] 
{HoldAll, Protected} 

したがってg未評価のままである:{3、7、11}

Function
+0

さて、問題は次のとおりです:[f /。 [x - >#1}&、list] – user1161552

+0

問題は、次のようなことです:vars = {x、y}; f = x + y; g =テーブル[vars [[i]] - > Slot [i]、{i、1、Length [vars]}];リスト= {{1,2}、{3,4}、{5,6}};マップ[f /。g&、list]; get {5、7、11}これは、fとuserとvarsの式が変数リストになるため、変数をハードコードできないからです。 – user1161552

+0

すばらしい、ありがとう。私が理解していないことの1つは、ブロックにシーケンスを送信することです。シーケンスはそのブロックのパラメータリストとして理解されますか? – user1161552

2

は(短い形式&)属性HoldAllを有しています。あなたはEvaluateでそれを強制することができます

Evaluate[f /. g] &[5] 
25 

Evaluateは、式の中で、より深い機能しません。あなたは書くことができませんf /. Evaluate[g] &

+0

興味深い - 私はEvaluateで完全な式をラップしようとしませんでした。 –

関連する問題