Ausdruck extrahierenIch bin ein großer Fan von Eval(Substitute(Expr(...), Expr(..), Expr(.)))
: )
Einziger Nachteil: die Expr(...), Expr(..), Expr(.)
... was mich auf die Idee von subst() - substitute() 2.0 brachte ... eine Funktion, die ihre Argumente nicht auswertet.
Beim Herumspielen mit der Ausdrucksbehandlung ist mir aufgefallen, dass die gewünschte Logik für Subst() der von Extract Expr() recht nahe kommt: Expr() muss nicht verwendet werden, und Name Expr() wird angewendet, wo immer es möglich ist:
Names Default to here(1);
// direct mode, no Expr necessary
Extract Expr(x^2 + y, x);// -> x
Extract Expr(x^2 + y, c);// no c in x^2 + y -> empty
// Name Expr mode
c=Expr(x^2);
Extract Expr(x^2 + y , c);// looks up c = x^2, find "x^2"" in x^2 +y
Wunderbar!
... bis:
Extract Expr(cc * d , cc); // -> cc
cc=Expr(x^2);
Extract Expr(cc * d, cc);// looks up cc = x^2 , so doesn't find cc in cc * d anymore
Gefährlich ...
Ist es nach der Definition von cc als Symbol mit dem Namen expr immer noch möglich, c „wörtlich“ in Extract Expr zu verwenden?
Extract Expr(cc * d , Expr(cc)); // doesn't work
Extract Expr(Expr(cc) , Expr(cc)); // finds Expr(cc)
Extract Expr(cc , Name Expr(Expr(cc))); // -> empty
Extract Expr(Name Expr(Expr(cc)) , Name Expr(Expr(cc))); // finds Name Expr(Expr(cc)), argh!
sogar:
cc=Expr(x^2);
clear symbols(cc);
Extract Expr(cc * d , cc); //-> empty()
Automatisierung und SkriptingBetreff: Ausdruck extrahierenVielleicht:
Verwenden Sie eine benutzerdefinierte Funktion als Wrapper für Extract Expr
Names default to here(1);
dummy=Function ({expression, pattern},
Extract Expr(expression, pattern);
);
cc = Expr(x^2);
dummy( Expr(cc+d), Expr(cc)); // -> ccBetreff: Ausdruck extrahierenSuchen Sie Antworten auf bestimmte Fragen? Haben Sie auch den Scripting Guide zu Ausdrücken gelesen : Scripting Guide > Programmiermethoden > Erweiterte Ausdrücke, Makros und Listen – Erweiterte Ausdrücke und insbesondere den Abschnitt über deren Auswertung?
Betreff: Extrakt ExprAuf der verlinkten Seite fand ich keine weiteren Informationen zu ExtractExpr().
@jthi schrieb:
Gibt es etwas, worauf Sie Antworten suchen?
Wie kann ich sicherstellen, dass JMP in dem Ausdruck cc * d nach cc sucht?
... selbst wenn cc als Name für einen anderen Ausdruck verwendet wird, wie zum Beispiel für x^2.
Extract Expr(cc * d , cc); // -> cc
cc=Expr(x^2);
Extract Expr(cc * d, cc);// looks up cc = x^2 , so doesn't find cc in cc * d anymore
und allgemeiner:
Eine benutzerdefinierte Funktion wertet IMMER ihre Argumente aus – mit Expr() kann man dies verhindern.
ExtractExpr ruft IMMER den nicht ausgewerteten Ausdruck hinter einem Namen ab (sofern vorhanden), bevor er verwendet wird – kann der Benutzer dies verhindern?
Plattformbefehle werden oft gestört, wenn Namen als Argumente verwendet werden - und Eval könnte das Problem beheben.
Wie viele Kategorien von Argumenten gibt es insgesamt in JSL? Gibt es eine rote Linie dahinter?
Betreff: Ausdruck extrahierenWarum würden Sie denselben Variablennamen auf diese Weise an mehreren Stellen verwenden?
Delete Symbols() und Clear Symbols() sind nicht dasselbe
Names Default To Here(1);
cc = Expr(x ^ 2);
Delete Symbols(cc);
Extract Expr(cc * d, cc);
Betreff: Ausdruck extrahierenDanke für den Link.
Mehr anzeigen...Es sieht so aus, als ob Extract Expr() je nach Definition von cc unterschiedlich funktioniert. Um cc wörtlich zu verwenden, vermeiden Sie die Neuzuweisung mit Expr() oder verwenden Sie Name Expr(), um Symbole sorgfältig zu verwalten und Bewertungsproblemen vorzubeugen. Ich hatte mit einer anspruchsvollen Arbeit zu kämpfen und wandte mich daher an
https://domypaper.com/. Der Service war ausgezeichnet. Der Autor war sachkundig, befolgte meine Anweisungen sorgfältig und lieferte eine gut organisierte, qualitativ hochwertige Arbeit. Die Kommunikation verlief reibungslos und die Arbeit wurde pünktlich geliefert. Ich bin mit den Ergebnissen äußerst zufrieden und würde diesen Service für zukünftige Aufgaben definitiv wieder nutzen.