我知道我们可以使用例如找到函数的逆函数solve
f(x):= a*x+b$
[invf]:solve(f=f(x),x);
但是,我还无法确定如何在新函数的定义中使用它。我尝试了一些事情,例如:
invF(f):=rhs(invf);
但是f
inrhs(invf)
不能识别为函数的参数invF(f)
。有什么方法可以定义逆,还是可以简单地使用此表达式并使用类似subst
的求值方法呢?
:=
不会对的右侧进行评估(甚至简化),因此rhs(invf)
在调用函数之前,函数主体中的任何内容都不会实际计算结果。这里需要确保在构造函数时将结果粘贴到函数主体中。
至少有两种方法可以做到这一点。更通用的方法是用define
代替定义函数:=
。然后在定义函数时评估主体。例如define(invF(x), rhs(inv));
。
仅在顶层(即不在任何函数中)起作用的另一种方法是使用所谓的quote-quote运算符''
,该运算符的作用是将某物的当前值内插到输入中,就好像它输入。例如invF(x) := ''(rhs(inv));
。
引用表达式在解析表达式时起作用,因此如果它出现在函数中可能会令人惊讶。例如,y: 123; f(x) := block([y: 2*x], ''y);
然后f(4)
返回123,而不是8。也就是说,我发现quote-quote既方便又有用-只需将其限制在顶层即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句