我正在尝试编写一个sage函数。
在下文中,代码块B使用诸如x0,x1,x2,x3之类的变量。我试图将代码块B概括为代码块A.代码块A中的res [1]是包含四个变量的列表。但是,在执行时,我收到以下错误:
**ValueError: variable names must be alphanumeric, but one is 'res[_sage_const_1 ]' which is not.**
有什么办法可以让代码块接受列表元素吗?
注意:degreeAndMonomialsCalculate()只是一个函数,它返回res [0]中函数的次数及其在res [1]中的唯一单项式(变量)
代码块A
def annihilatorReturn(function):
res=degreeAndMonomialsCalculate(function)
A.<res[1]>=BooleanPolynomialRing(len(res[1]))
X=BooleanFunction(function)
B=X.annihilator(res[0])
return B
代码块B
def annihilatorReturn():
A.<x0,x1,x2,x3>=BooleanPolynomialRing(4)
Y=x0*x1*x2+x2*x1+x2*x3+x3*x1
X=BooleanFunction(Y)
B=X.annihilator(3)
return B
答案 0 :(得分:0)
通常情况下,有一个“最小的工作示例”,所以我们不需要你的额外功能。
这里有两个问题。首先,即使你避免了错误,你也会得到这个错误。
def test():
res = ['x1','x2']
A.<res> = BooleanPolynomialRing(len(res))
return A
....:
sage: test()
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<snip>
IndexError: the number of names must equal the number of generators
这是因为Sage 将无效的Python A.<res> ...
预先到其他有效的内容中。
sage: preparse("A.<res> = BooleanPolynomialRing(len(res))")
"A = BooleanPolynomialRing(len(res), names=('res',)); (res,) = A._first_ngens(1)"
这也会导致您的问题:
sage: res = ['x','y']
sage: A.<res> = BooleanPolynomialRing(len(res))
<snip>
ValueError: variable names must be alphanumeric, but one is 'res[Integer(1)]' which is not.
我并没有看到这种语法的简单方法。然而,
sage: res = [2,['x','y']]
sage: A = BooleanPolynomialRing(names=res[1])
sage: A
Boolean PolynomialRing in x, y
似乎应该做的工作。见
sage: BooleanPolynomialRing?
了解更多信息。