Хорошие записи могут быть очень полезны - но я не уверен, что этот конкретный нужен ...
Тем не менее, пакет Notation
делает это довольно легко.Поскольку при использовании палитры Нотации есть много скрытых полей, я буду использовать снимок экрана:
Вы можете увидеть базовую конструкцию NotationMake*
downvalues с помощью опции Action -> PrintNotationRules
.В [4] на скриншоте генерируется
NotationMakeExpression[
SubscriptBox[vals_, RowBox[{vars_, "|", svars_}]], StandardForm] :=
MakeExpression[
RowBox[{"restrict", "[", RowBox[{vars, ",", svars, ",", vals}],
"]"}], StandardForm]
NotationMakeBoxes[Subscript[vals_, vars_ | svars_], StandardForm] :=
SubscriptBox[MakeBoxes[vals, StandardForm],
RowBox[{Parenthesize[vars, StandardForm, Alternatives], "|",
Parenthesize[svars, StandardForm, Alternatives]}]]