sage 5.0 execfile() 的语法错误
以下是我想在一个会话中调用的.sage文件的一部分:
def projective_grid(m,n):
r"""
The mxn grid in projective space
"""
g = graphs.Grid2dGraph(m,n)
g = Graph(g)
for i in range(m):
g.add_edge(((i,0),(m-i-1,n-1),1))
for j in [1..(n-2)]:
g.add_edge(((0,j),(m-1,n-j-1),1))
g.delete_edge(((0,0),(m-1,n-1)))
g.add_edge(((0,0),(m-1,n-1),2))
g.delete_edge(((m-1,0),(0,n-1)))
g.add_edge(((m-1,0),(0,n-1),2))
if n%2==1 and m == 2:
g.delete_edge((0, (n-1)/2), (1, (n-1)/2))
g.delete_edge((0, (n-1)/2), (1, (n-1)/2))
g.add_edge((0, (n-1)/2),(1,(n-1)/2),2)
if n == 2 and m%2==1:
g.delete_edge(((m-1)/2, 0), ((m-1)/2, 1))
g.delete_edge(((m-1)/2, 0), ((m-1)/2, 1))
g.add_edge(((m-1)/2, 0), ((m-1)/2, 1),2)
pos = {}
k = -1
for i in [1..m]:
for j in [1..n]:
k+=1
pos[k] = (j,i)
g.set_pos(pos)
return g
我可以把这段代码复制粘贴到sage会话中而不会出错,但当我尝试用execfile()来调用这个文件时,就出现了以下问题:
sage: execfile('/Users/WyattAlt/Desktop/thesis/stack_test.sage')
------------------------------------------------------------
File "/Users/WyattAlt/Desktop/thesis/stack_test.sage", line 9
for j in [1..(n-2)]:
^
SyntaxError: invalid syntax
如果我把有问题的部分换成range(1,n-1)之类的,问题就解决了,但我想知道为什么这样不行。有什么想法吗?提前谢谢你。
补充说明:我使用的是OS X 10.5.8
1 个回答
2
Sage的语法和Python的语法在一些地方是不同的,包括范围语法。
在后台,Sage控制台会将你输入的内容预处理成标准的Python代码:
sage: [1..10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sage: preparse('[1..10]')
'(ellipsis_range(Integer(1),Ellipsis,Integer(10)))'
实际上,连整数这样的字面量也会被包装起来:
sage: 10
10
sage: preparse('10')
'Integer(10)'
当你使用execfile
这个纯Python的函数时,你就绕过了Sage的预处理器。如果你想要类似的功能,可以使用load
:
sage: !echo "print [1..10]" >> test.sage
sage: !cat test.sage
print [1..10]
sage: execfile("test.sage")
------------------------------------------------------------
File "test.sage", line 1
print [1..10]
^
SyntaxError: invalid syntax
sage: load("test.sage")
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]