我想知道为什么这两个“程序”产生不同的输出
f(x)=x^2
f(90).mod(7)
和
def f(x):
return(x^2)
f(90).mod(7)
谢谢
答案 0 :(得分:1)
好问题!让我们更深入地研究有问题的功能。
f(x)=x^2
def g(x):
return(x^2)
print type(g(90))
print type(f(90))
这产生
<type 'sage.rings.integer.Integer'>
<type 'sage.symbolic.expression.Expression'>
因此,您看到的是使用f(x)
表示法定义的 symbolic 函数和使用def
关键字的 Python 函数之间的区别。在Sage中,前者可以访问很多普通Sage整数所没有的东西(例如微积分)。
在这种情况下,我为您推荐的是
sage: a = f(90)
sage: ZZ(a).mod(7)
1
或者实际上可能更强大
sage: mod(a,7)
1
更长的解释。
对于符号性内容,mod
不是您想的。实际上,我不确定它会做任何事情(不过,请参阅mod
的文档以了解如何将其用于理想情况下的多项式模块化工作)。这是代码(可通过x.mod??
访问,可通过x.mod?
访问文档):
from sage.rings.ideal import is_Ideal
if not is_Ideal(I) or not I.ring() is self._parent:
I = self._parent.ideal(I)
#raise TypeError, "I = %s must be an ideal in %s"%(I, self.parent())
return I.reduce(self)
事实证明,对于通用环(如符号“环”),在最后一步没有任何反应:
return f
这就是为什么我们需要以另一种方式要求它再次成为整数。参见Trac 27401。