Небольшой вариант метода Саймона заключается в использовании значения по умолчанию в функции, а не глобальной переменной ($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}]
<b> 2</b>
<b> Sqrt[10]</b>
Изменение центра по умолчанию:
SetOptions[myNorm2, Center -> {8, 8}];
myNorm2[{5, 7}]
<b> Sqrt[10]</b>