あなたが得た結果は、それが以前の定義からクリアされていなかっOut[124]たと私に信じさせます. 特に、フォームの式によって設定さfれる として知られているものを持っているようです。OwnValue
f = 1/8
(コロンがないことに注意してください。)これを確認するには、次のコマンドを実行します。
g = 5;
OwnValues[g]
返す
{HoldPattern[g] :> 5}
残念ながら、関数定義 (またはそのバリアントとして知られている) のような他の定義にOwnValues 取って代わります。したがって、定義DownValueUpValue
g[x_] := x^2
g[5]に評価されます5[5]。明らかにあなたが望むものではありません。したがって、Clear定義する前に関数として使用する予定のシンボル。そうは言っても、あなたの定義fはまだ問題に遭遇します。
問題は、 を定義するときにSetDelayed( ) を使用することです。これにより、代入の右側が後で実行されるまで値を取得できなくなります。例えば、:=ff
D[x^2 + x y, x]
f[x_, y_] := %
x = 5
y = 6
f[x, y]
代わりに を返します6。これは、6が最後に生成された結果であり、f事実上 のシノニムであるために発生し%ます。これには 2 つの方法があります。どちらかを使用しますSet( =)
Clear[f, x, y]
D[x^2 + x y, x];
f[x_, y_] = %
f[5, 6]
16期待どおりを返すか、それを取得する前にが%その値に置き換えられることを確認します。SetDelayed
Clear[f, x, y]
D[x^2 + x y, x];
f[x_, y_] := Evaluate[%]