あなたが得た結果は、それが以前の定義からクリアされていなかっOut[124]
たと私に信じさせます. 特に、フォームの式によって設定さf
れる として知られているものを持っているようです。OwnValue
f = 1/8
(コロンがないことに注意してください。)これを確認するには、次のコマンドを実行します。
g = 5;
OwnValues[g]
返す
{HoldPattern[g] :> 5}
残念ながら、関数定義 (またはそのバリアントとして知られている) のような他の定義にOwnValues
取って代わります。したがって、定義DownValue
UpValue
g[x_] := x^2
g[5]
に評価されます5[5]
。明らかにあなたが望むものではありません。したがって、Clear
定義する前に関数として使用する予定のシンボル。そうは言っても、あなたの定義f
はまだ問題に遭遇します。
問題は、 を定義するときにSetDelayed
( ) を使用することです。これにより、代入の右側が後で実行されるまで値を取得できなくなります。例えば、:=
f
f
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[%]