Überschreibt die standardmäßige Anzeigereihenfolge von Funktionen ohne Auftrag

8

In zwei neuen Fragen ( 1 , 2 ), die vorherigen Poster versuchten, die Ausgabe-Reihenfolge von Plus zu kontrollieren, was ein% ist co_de% -Funktion. Michael Pilat angegeben , dass intern Orderless Funktionen Orderless ihre Parameter, die die Schwierigkeit verursacht hat. Allerdings warnte er davor, Sort non Plus zu machen. Die Lösungen für die beiden vorherigen Fragen bestehen darin, eine Funktion zu erstellen, die wie Orderless angezeigt wird, aber nicht Plus selbst. Dies ist sicherlich effektiv, aber meine Frage ist, wie können wir die Standard Orderless Reihenfolge ändern?

    
rcollyer 06.11.2010, 03:41
quelle

1 Antwort

5

Ich muss ein wenig mehr Forschung betreiben, aber hier sind zwei Wege; Der Catch ist, dass Sie das Attribut Orderless nicht verwenden. Simon sollte die Technik der Mustererkennung mit einer Bedingung aus seine Antwort auf Frage 1 , auf die Sie verwiesen haben.

Mit Order , OrderedQ und Sort kommt man nirgendwohin, weil Orderless functions mit Äquivalenz zu diesen Methoden sortiert, aber nicht sortiert mit ihnen.

Die erste Methode aus Simons Antwort ist die Verwendung eines Condition :

%Vor%

Diese Definition von f [stuff__] wird ausgewertet, wenn die Reihenfolge der Argumente nicht die gewünschte Reihenfolge ist, und dann in diese Reihenfolge transformiert.

Eine andere Technik ist es, ein wenig low-level zu bekommen und $Pre oder $PreRead :

%Vor%

Es gibt einige Probleme mit beiden dieser Ansätze, wie sie zum Beispiel stehen, dass bestimmte $Pre -Funktion nicht gut mit z. %Code%.

Also, damit ist jetzt etwas zu tun. Ich hoffe, dass ich updaten kann, nachdem ich ein bisschen mehr darüber geforscht habe.

    
Michael Pilat 06.11.2010 06:53
quelle

Tags und Links