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] *)
对于这个简单的函数,你可以在第二种情况下使用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]