2013-10-02 36 views
1

我正在尝试编写一个sage函数。接受sage中的变量BooleanPolynomialRing

在下面,代码块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]

代码块甲

的功能度的功能
def annihilatorReturn(function): 
    res=degreeAndMonomialsCalculate(function) 
    A.<res[1]>=BooleanPolynomialRing(len(res[1])) 
    X=BooleanFunction(function) 
    B=X.annihilator(res[0]) 
    return 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

通常情况下,有一个“最小工作示例”,这样我们就不需要额外的功能。

这里有两个问题。首先,即使你避免了错误,你也会得到这个。

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 

这是因为贤者preparses无效的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? 

欲了解更多信息。