在此代码中查找错误

时间:2015-12-04 23:18:08

标签: maple

我一直收到 错误,';'这段枫木代码意外 。我看了看,似乎无法找到我出错的地方。有谁能发现它?

QSFactorization := proc (n::(And(posint, odd)), mult::nonnegint := 0, { mindeps::posint := 5, c := 1.5 }) 

local mfb, m, x, fb, nfb, r, M, d; 

if isprime(n) then  
return "(n)"  
elif issqr(n) then  
return "(isqrt(n))"*"(isqrt(n))"  
elif n < 1000000 then  
return ifactor(n)  
end if; 

if mult = 0 then  
mfb := MultSelect(n, ':-c' = c)  
else mfb := [mult, FactorBase(mult*n, c)]  
end if;  

m := mfb[1];  
if 1 < m then  
print('Using*multiplier; -1');  
print(m)  

end if;  
x := m*n*print('Using*smoothness*bound; -1'); 

print(ceil(evalf(c*sqrt(exp(sqrt(ln(n)*ln(ln(n))))))));  
fb := Array(mfb[2], datatype = integer[4]);  
nfb := ArrayNumElems(fb);  
print('Size*of*factor*base; -1'); 
print(nfb);  
r := Relations(x, fb, ':-mindeps' = mindeps);  
M := r[3]; print('Smooth*values*found; -1');   
print(nfb+mindeps);  
print('Solving*a*matrix*of*size; -1');   
print(LinearAlgebra:-Dimension(M));    
d := Dependencies(M);   
print('Number*of*linear*dependencies*found; -1');  
print(nops(d));  
print('Factors; -1');  
FindFactors(n, r, d)  
end proc

我真的很感激任何见解。

1 个答案:

答案 0 :(得分:1)

您的基本问题是您在print语句中使用了错误的引号。这是无效的,

print('Using*multiplier; -1');

您正在使用单右引号(tick),在Maple中用于取消评估。在这种情况下,print语句中的分号是语法错误。

使用双引号或单引号。前者分隔字符串,后者分隔名称。例如,

print("Using*multiplier; -1");

print(`Using*multiplier; -1`);

如果您选择使用名称引号,那么print命令将在Maple GUI中输出输出,默认情况下使用斜体字体的名称,但您不会在输出中看到引号。

如果您选择使用字符串引号,则print命令将在输出中显示引号,但默认情况下将使用直立的罗马字体。

您帖子上的其他一些评论/答案(自删除后)表明您缺少这两个语句的语句终止符(冒号或分号),

print(m)
FindFactors(n, r, d)

事实并非如此。这些语句分别出现在end ifend proc之前,因此语句终止符对于它们是可选的。我个人不喜欢使用这样的可选终结器实例编写Maple,因为当你添加中间行或将代码传递给其他人时会导致混淆等等。