我想知道为什么这两个“程序”产生不同的输出
f(x)=x^2
f(90).mod(7)
和
def f(x):
return(x^2)
f(90).mod(7)
谢谢
好问题!让我们深入研究一下这些函数。
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)
表示法定义的符号函数和使用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。