Simon の方法のわずかなバリエーションは、グローバル変数 ( ) ではなく、関数で既定値を使用することです$Center
。
デフォルトの原点が (5, 5) だとすると、次のようになります。
myNorm[pos:{_, _}, center_:{5, 5}] := EuclideanDistance[pos, center]
_:{5, 5}
を使用してデフォルト値を定義していることに注意してください。
これで、次のことができます。
myNorm[{5, 7}]
(* Out[]= 2 *)
または、別のセンターを一時的に使用します。
myNorm[{5, 7}, {8, 8}]
(* Out[]= Sqrt[10] *)
この単純な関数では、代わりに 2 番目のケースを使用できますが、このメソッドの有用性がより複雑なEuclideanDistance
定義であることがわかると思います。myNorm
この方法の欠点は、デフォルトの中心を簡単に変更できないことです。
デフォルトの中心を簡単に変更できる別のバリエーションは、より冗長ですが、次を使用することOptions
です。
Options[myNorm2] = {Center -> {5, 5}};
myNorm2[pos : {_, _}, OptionsPattern[]] :=
EuclideanDistance[pos, OptionValue[Center]]
構文は次のとおりです。
myNorm2[{5, 7}]
myNorm2[{5, 7}, Center -> {8, 8}]
2
平方根[10]
デフォルトの中心を変更する:
SetOptions[myNorm2, Center -> {8, 8}];
myNorm2[{5, 7}]
平方根[10]