subst() - sostituisci() 2.0☐ nuova fantastica funzionalità
☐ potrebbe aiutare molti utenti!
☑ rimuove qualcosa che sembra un "insetto"
☑ bello da avere
☐ nessuno ne ha bisogno
Cosa ti ha ispirato a richiedere questa lista dei desideri?
Substitute è una funzione molto potente per la gestione delle espressioni:
Utilizzo di JSL per sviluppare applicazioni efficienti e robuste (EU 2018 415)
Un grande svantaggio di Substitute : valuta i suoi argomenti : (
Pertanto, le espressioni con Substitute() diventano piuttosto lunghe e difficili da leggere. Oltre a ciò, un nuovo scripter JSL deve imparare la sintassi corretta: nessuno si aspetta che tutte quelle Expr() siano necessarie.
Esempio:
Substitute( Expr( a + Sqrt( a ) ), Expr( a ), Expr( b ) )
Quale miglioramento vorresti vedere?
Una nuova funzione subst() che non valuta i suoi argomenti. Quindi si può scrivere:
Substitute( a + Sqrt( a ), a, b )
Perché questa idea è importante?
Subst() ed Eval(Subst()) verranno utilizzati milioni di volte e ogni volta uno scripter JSL sarà felice che tu li abbia implementati!
altri desideri da 
Automazione e scriptingOggetto: subst() - replace() 2.0Nella maggior parte dei casi, l'utente fornirà almeno uno degli argomenti come nome, con l'idea che JMP cerchi il nome e utilizzi Name Expr invece del nome stesso.
Quindi, JMP dovrebbe valutare gli argomenti a un livello (cercare, prendere l' Espr Nome se disponibile, non valutare oltre) dove è possibile scrivere:
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
.
E se un utente vuole essere sicuro che JMP utilizzi l'argomento così com'è (senza risolvere Name Expr .), può scrivere:
a=Expr(myExpr);
Subst(x+y, x, Expr(a)) // result: a + y
Oggetto: subst() - replace() 2.0In altri termini:
Sostituisci()
... un Substitute() con la magia/facilità di 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
sfortunatamente, cosa non funziona (facile come avrei voluto):
c=Expr(x^2);
Extract Expr(c * d, Expr(c))
Estrai Espr
Re: subst() - substitute() 2.0 - Stato modificato in: RiconosciutoGrazie per il suggerimento @hogi .