Diese Frage ergibt sich aus der Antwort von Michael Pilat in Preventing “Plus” from rearranging things. Es definiert er eine benutzerdefinierte +
NotationWie kann ich die Rekursion in einer Format/Interpretation Mathematica Konstruktion stoppen?
Das Problem mit dabei ist, Sie nicht die Ausgabe kopieren und einfügen können (obwohl% oder Out [] noch funktioniert). Um dies zu umgehen, sollten Sie den Typ Interpretation
verwenden, der es ermöglicht, dass ein Ausdruck als eine Sache angezeigt wird, aber als eine andere interpretiert wird, wenn er als Eingabe geliefert wird. Meine Änderung von Michaels Antwort ist
Format[myPlus[expr__]] := Interpretation[Row[{expr}, "+"], myPlus[expr]]
Dies kann kopiert und eingefügt werden erfolgreich. Das Problem liegt darin, kopierte Ausdrücke zu modifizieren. Sie können einen kopierten Ausdruck zurück in InputForm
mit Ctrl-Shift-I
konvertieren, dann ändern Sie alles, was Sie wollen, und verwenden Sie die InputForm
in einem beliebigen Ausdruck. Aber Wenn Sie versuchen, es wieder in StandardForm
mit Ctrl-Shift-N
ändern, dann geben Sie eine Rekursion, wo das zweite Argument in der Interpretation
wiederholt ausgewertet wird. Dies ist trotz Interpretation
mit dem Attribut HoldAll
(die während der normalen Auswertung ordnungsgemäß funktioniert).
Normalerweise, wenn einfache Notationen definieren, verwende ich die Low-Level-MakeBoxes
, zB
myPlus/:MakeBoxes[myPlus[expr__],fmt_]:=With[{r=Riffle[MakeBoxes/@{expr},"+"]},
InterpretationBox[RowBox[r],myPlus[expr]]]
die einwandfrei funktioniert, so habe ich nicht diese Rekursion Problem vor.
Also meine Frage (endlich) ist: Was mit meinem Format
Typ Befehl falsch gelaufen ist und wie sie durch feste? Oder: Wie machen Sie ein High-Level-Äquivalent von meinem MakeBoxes
Befehl?
BTW, da Interpretation funktioniert gut während der normalen Auswertung, könnte dies nur ein Fehler mit der "Convert To" -Auswertungen sein ... – Simon
Replizieren nicht auf M'ma 7.0.1/Linux AMD64. Getestet wurde der Ausdruck Interpretation [] als "myPlus [a, b, c]". Konvertiert problemlos hin und her. –
@Eric Das ist die gleiche Version und das gleiche System, das ich verwende. Ich habe der WRI einen Fehlerbericht gesendet, um zu sehen, ob sie das Verhalten reproduzieren. – Simon