There are some invisible operators in Mathematica (\[ImplicitPlus],\[InvisibleTimes],\[InvisibleComma],\[InvisibleApplication]). How can I make my own that would not interfere with built-in functions (Plus,Times,Sequence,Apply)? Is there some invisible character like those different kinds of spaces (\[RawSpace],\[ThinSpace],\[VeryThinSpace], etc.) that won't be interpreted as multiplication, so that I can define my own patterns and behaviour with it?

EDIT: OK, I think this is it:

TemplateBox[{}, "op",
  InterpretationFunction :> (RowBox@{"~op~"} &), 
  DisplayFunction :> (RowBox@{"\[InvisibleSpace]"} &)];
SetOptions[EvaluationNotebook[], InputAliases -> {"op" -> %}]
SetAttributes[op, Flat];

Now if I type 1[ESC]op[ESC]2[ESC]op[ESC]3 it will be interpreted as 1~op~2~op~3 which means op[1,2,3] if op has Flat attribute, but will be displayed as 123.

I wonder why nobody came up with it, what all the gurus doing?

Whatever, now I can finally create pretty EDSLs in Mathematica :D

  • 1
    $\begingroup$ Related? $\endgroup$ – Öskå Feb 13 '14 at 10:40
  • $\begingroup$ @Öskå Yes, basically I need an invisible infix operator of my choice. $\endgroup$ – swish Feb 13 '14 at 10:44
  • 2
    $\begingroup$ An operator like that will be endless fun when debugging. $\endgroup$ – Yves Klett Feb 17 '14 at 7:03
  • 2
    $\begingroup$ @YvesKlett \[InvisibleBug] ! $\endgroup$ – Dr. belisarius Feb 18 '14 at 5:08
  • 2
    $\begingroup$ @belisarius hehe plenty of those already :-) $\endgroup$ – Yves Klett Feb 18 '14 at 6:22

I can't provide working code because I don't have access to Mathematica now, but you can do this using MakeExpression. You can reverse engineer the required box structure by typing the InfixForm of Times[x,y] in an Input Cell. Select the input cell, and press Shift-Ctrl-E to see the underlying box structure for infix multiplication. You want the same structure, except with the operator you want.

You can probably get examples if you search for MakeExpression, MakeBoxes at MathGroup.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.