10
$\begingroup$

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

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

1 Answer 1

5
+25
$\begingroup$

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.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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