subst() - substitute() 2.0☐ 很酷的新功能
☐ 可以帮助很多用户!
☑ 删除一些感觉像“错误”的东西
☑ 很高兴有
☐ 没人需要它
是什么启发了这个愿望清单请求?
Substitute 是一个非常强大的表达式处理函数:
使用 JSL 开发高效、强大的应用程序 (EU 2018 415)
Substitute的一个很大的缺点是:它评估它的参数:(
因此,带有Substitute() 的表达式会变得非常冗长且难以阅读。除此之外,新的 JSL 脚本编写者必须学习正确的语法 - 没有人认为所有这些 Expr() 都是必要的。
例子:
Substitute( Expr( a + Sqrt( a ) ), Expr( a ), Expr( b ) )
您希望看到什么改进?
一个新的函数subst ()不计算其参数。然后可以这样写:
Substitute( a + Sqrt( a ), a, b )
这个想法为什么重要?
Subst()和Eval(Subst())将被使用数百万次 - 并且每次 JSL 脚本编写者都会很高兴你实现了它!
其他愿望
自动化和脚本回复:subst() - substitute() 2.0在大多数情况下,用户将提供至少一个参数作为名称 - JMP 会查找名称并使用名称表达式而不是名称本身。
因此,JMP 应该将参数评估到一定水平(查找,如果可用则采用Name Expr ,不再进一步评估),这样就可以写:
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
.
如果用户想要确保 JMP 按原样使用参数(不解析Name Expr .),他可以写道:
a=Expr(myExpr);
Subst(x+y, x, Expr(a)) // result: a + y
回复:subst() - substitute() 2.0换句话说:
替代()
... Substitute()具有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
不幸的是,没有起作用的是(如我所愿的那么简单):
c=Expr(x^2);
Extract Expr(c * d, Expr(c))
提取表达式
回复:subst() - substitute() 2.0 - 状态更改为:已确认感谢@hogi 的建议。