我知道我们可以使用solve 例如找到函数的反函数
f(x):= a*x+b$
[invf]:solve(f=f(x),x);
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何在新函数的定义中使用它。我尝试了一些事情,例如:
invF(f):=rhs(invf);
Run Code Online (Sandbox Code Playgroud)
但finrhs(invf)不被识别为 function 的参数invF(f)。有没有什么方法可以定义逆,或者可以简单地使用这个表达式并使用类似的东西subst来评估它?
的右侧:=不会被计算(甚至不会被简化),因此rhs(invf)函数体中类似的内容在调用函数之前实际上不会计算结果。这里需要确保在构造函数时将结果粘贴到函数体中。
至少有两种方法可以做到这一点。define更通用的方法是使用而不是定义函数:=。然后在定义函数时评估主体。例如define(invF(x), rhs(inv));。
另一种仅在顶层起作用(即不在任何函数内部)的方法是使用所谓的引号运算符,''它具有将某些内容的当前值插入到输入中的效果,就好像它一样被输入。例如invF(x) := ''(rhs(inv));。
引用-引用在解析表达式时起作用起作用,因此如果它出现在函数中可能会令人惊讶。例如y: 123; f(x) := block([y: 2*x], ''y);,然后f(4)返回 123,而不是 8。也就是说,我发现 quote-quote 很方便且很有帮助——只需将其限制在顶级内容即可。