我一直收到 错误,';'这段枫木代码意外 。我看了看,似乎无法找到我出错的地方。有谁能发现它?
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
我真的很感激任何见解。
答案 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 if
和end proc
之前,因此语句终止符对于它们是可选的。我个人不喜欢使用这样的可选终结器实例编写Maple,因为当你添加中间行或将代码传递给其他人时会导致混淆等等。