7.7 遅延評価を使うか使わないか

個人的には、普段は関数定義をするときあまり考えず、 := を使っている。

:= を使わないとまずい場合として、 すぐ思い浮かぶのは

:= が使えない場合として、Mathematica のチュートリアルには、 次のようなことがあげられている。 計算の結果として得られた式の中のパターンに、 何かを「代入」してどうなるか調べる場合、 /. を使った一時的代入で済むけれど、 関数を定義する場合には := でなく = を使う。 要するに =% は通るけれど、:=% は通らない、 ということだよね。
チュートリアルに載っている例
D[Log[Sin[x]]^2, x]
dlog[x_] = %
まあ、こんなのは D[Log[Sin[x]]^2, x] の結果 (2 Cot[x] Log[Sin[x]]) をコピペして、
dlog[x_] := 2 Cot[x] Log[Sin[x]]
とすれば良いだけのような気もするけど。


個人的な経験では、 重い計算が必要だが、それは1回だけやっておけば済むような場合に、 := を使った関数定義の右辺に書いてしまうと、 効率が落ちて困った経験がある。 でもそれは、:== の問題というよりは、 もっと別の問題かもしれない。



桂田 祐史