subst() - Ersatz() 2.0☐ coole neue Funktion
☐ könnte vielen Benutzern helfen!
☑ entfernt etwas, das sich wie ein „Bug“ anfühlt
☑ schön zu haben
☐ niemand braucht es
Was hat Sie zu dieser Wunschliste inspiriert?
Substitute ist eine sehr leistungsfähige Funktion zur Ausdrucksbehandlung:
Mit JSL effiziente und robuste Anwendungen entwickeln (EU 2018 415)
Ein großer Nachteil von Substitute : Es wertet seine Argumente aus: (
Daher werden Ausdrücke mit Substitute() ziemlich lang und schwer zu lesen. Außerdem muss ein neuer JSL-Skripter die richtige Syntax lernen - niemand geht davon aus, dass all diese Expr() notwendig sind.
Beispiel:
Substitute( Expr( a + Sqrt( a ) ), Expr( a ), Expr( b ) )
Welche Verbesserung würden Sie gerne sehen?
Eine neue Funktion subst() , die ihre Argumente nicht auswertet. Dann kann man schreiben:
Substitute( a + Sqrt( a ), a, b )
Warum ist diese Idee wichtig?
Subst() und Eval(Subst()) werden Millionen Mal verwendet – und jedes Mal wird ein JSL-Skripter froh sein, dass Sie es implementiert haben!
weitere Wünsche von 
Automatisierung und SkriptingBetreff: subst() - substitute() 2.0In den meisten Fällen gibt der Benutzer mindestens eines der Argumente als Namen an – in der Annahme, dass JMP den Namen nachschlägt und den Namensausdruck anstelle des Namens selbst verwendet.
Daher sollte JMP die Argumente bis zu einem Level auswerten (nachschlagen, den Name Expr übernehmen, falls verfügbar, nicht weiter auswerten), wo es möglich ist, Folgendes zu schreiben:
a=Expr(myExpr);
Subst(x+y, x, a) // result: myExpr + y
</CODE>instead of </P><PRE><CODE class=" language-jsl">a=Expr(myExpr);
Substitute(Expr(x+y), Expr(x), Name Expr(a)) // result: myExpr + y
.
Und wenn ein Benutzer sicher sein möchte, dass JMP das Argument so verwendet, wie es ist (ohne den Name Expr . aufzulösen), kann er schreiben:
a=Expr(myExpr);
Subst(x+y, x, Expr(a)) // result: a + y
Betreff: subst() - substitute() 2.0Mit anderen Worten:
Subst()
... ein Substitute() mit der Magie/Einfachheit von Extract Expr()
clear symbols();
// direct mode, no Expr necessary
Extract Expr(x + 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
Was leider nicht funktioniert (so einfach wie ich es mir wünsche):
c=Expr(x^2);
Extract Expr(c * d, Expr(c))
Ausdruck extrahieren
Betreff: subst() - substitute() 2.0 - Status geändert in: BestätigtDanke für den Vorschlag, @hogi .