Если вы хотите написать функцию, которая обновляет значение определенной переменной, это похоже на передачу переменной по ссылке. Стандартный способ достижения этого в Mathematica - это использование Hold*
атрибутов в вашей функции.
SetAttributes[SinLocatorPane, HoldFirst];
SinLocatorPane[sinvalue_] :=
LocatorPane[Dynamic[x, (x = #; sinvalue = Sin[First[#]]) &],
Plot[Sin[x], {x, 0, 10}]]
Тогда
{Dynamic[sv], SinLocatorPane[sv]}
будет работать, как вы ожидали. Ваш код работал, потому что Dynamic имеет атрибут HoldFirst
, и это позволило вашему коду обновлять переменную sinvalue
. В противном случае Dynamic не был действительно необходим