代码之家  ›  专栏  ›  技术社区  ›  hiro protagonist

sage语法A.<x>

  •  1
  • hiro protagonist  · 技术社区  · 7 年前

    sage 我可以创造一个 PolynomialRing 在变量中的字段上 x 这样地:

    A.<x> = PolynomialRing(GF(2))
    

    doc .

    我这里的问题纯粹是关于语法:什么是 A.<x> __something__ 调用的函数?或者这里发生了什么?所有这些是怎么分配给你的 A (和 )?

    sage: from dis import dis
    sage: def f():
    ....:     A.<x> = PolynomialRing(GF(2))
    ....:     return A
    ....: 
    sage: dis(f)
      2           0 LOAD_GLOBAL              0 (PolynomialRing)
                  3 LOAD_GLOBAL              1 (GF)
                  6 LOAD_GLOBAL              2 (Integer)
                  9 LOAD_CONST               1 (2)
                 12 CALL_FUNCTION            1
                 15 CALL_FUNCTION            1
                 18 LOAD_CONST               2 ('names')
                 21 LOAD_CONST               5 (('x',))
                 24 CALL_FUNCTION          257
                 27 STORE_FAST               0 (A)
                 30 LOAD_FAST                0 (A)
                 33 LOAD_ATTR                3 (_first_ngens)
                 36 LOAD_CONST               4 (1)
                 39 CALL_FUNCTION            1
                 42 UNPACK_SEQUENCE          1
                 45 STORE_FAST               1 (x)
    
      3          48 LOAD_FAST                0 (A)
                 51 RETURN_VALUE        
    

    括号叫什么 _first_ngens ?

    1 回复  |  直到 7 年前
        1
  •  1
  •   kcrisman    7 年前

    Here is an example of the syntax you need :

    sage: preparse("A.<x> = PolynomialRing(GF(2))")
    "A = PolynomialRing(GF(Integer(2)), names=('x',)); (x,) = A._first_ngens(1)"
    

    为了详细说明,Sage构建了一个preparser,它接受在数学上有意义的无效Python输入,并给出有效的Python。事实上,即使你不这么认为,它也有很多:

    sage: preparse("2+2")
    'Integer(2)+Integer(2)'
    

    使算法具有任意精度 Integer int S最著名的例子可能是

    sage: preparse("f(x)=x^2")
    '__tmp__=var("x"); f = symbolic_expression(x**Integer(2)).function(x)'
    

    def Python的功能也是如此。

    (最后,关于为什么在您最初的示例中使用这种语法,显然历史是这也是Magma的语法。)