python - 使用 Python 创建自定义语言

标签 python sage

我最近开始玩 Sage,我开始怀疑标准的 Python int包装在一个名为 Integer 的自定义类中在鼠尾草。如果我输入 type(1)在 Python 中,我得到 <type 'int'> , 但是,如果我在 sage 提示中输入相同的内容,我会得到 <type 'sage.rings.integer.Integer'> .

如果我想替换 Python int (或 listdict )与我自己的自定义类,如何完成?会有多困难(例如,我可以完全用 Python 完成吗)?

最佳答案

作为其他答案的补充:在运行任何代码时,Sage 都有一个预处理步骤,可将 Sage-Python 转换为真正的 Python(然后执行)。这是由 preparse 函数完成的,例如

sage: preparse('a = 1')
'a = Integer(1)'
sage: preparse('2^40')
'Integer(2)**Integer(40)'
sage: preparse('F.<x> = PolynomialRing(ZZ)')
"F = PolynomialRing(ZZ, names=('x',)); (x,) = F._first_ngens(1)"

这一步正是允许透明使用 Integer(代替 int)和其他非标准语法(如上面的多项式环示例)和 [a..b] 等)。

据我所知,这是在 Python 中完全透明地使用内置类型替换的唯一方法。

关于python - 使用 Python 创建自定义语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10376129/

相关文章:

python - 在 Python 中,获取有关 IP 地址的更多信息

python - 从 Haskell 调用 Sage

r - 我如何从 R 中调用 Sage?

python - 如何通过 Python 中的 Sagemath 库理解可疑的语法应用

python - 查找自上次事件 Pandas 数据框以来的天数

python - 使用 numpy 加载和存储稀疏数据的性能

python - Odoo12ce 域 self 和 Many2oe 域问题

python - 使用 robobrowser 设置普通复选框

python - 圣人数学重复过程

python - 让 sage 与 ipython 一起工作