2013-12-18 4 views
1

У меня есть следующий код и раздражающая ошибка, "[" Неожиданная ошибка Maple продолжает расти. Кто-нибудь видит, что я делаю неправильно, потому что я смотрю на экран часами и все еще не вижу его.Ошибка, "[" неожиданный В Maple

Relations:=proc(n::posint,fb::Array,{mindeps::posint:=5,verbose::truefalse:=false}) 
local s,np,f,j,g,f1,f2,i; 
s:=isqrt(n); 
np:=ArrayNumElems(fb); 
f:=[]; 
j:=1; 

g:=np+mindeps; 
while nops(f) < g do 
    f1:=FBTrialDivision(n,s-j+1,fb); 
    f2:=FBTrialDivision(n,s+j,fb); 
    f:=[op(f),f1,f2]; 
    j:=j+1 
end do; 
if verbose then 
    printf("smooth",g,2*j-2) 
else 
    print(""); 
    print(2*j-2) 

end if 
[Vector([seq(f[i][1], i = 1..nops(f))]),Vector([seq(f[i][2], i = 1..nops(f))]), 
LinearAlgebra:-Transpose(Matrix([seq(f[i][3], i = 1..nops(f))]))] 

end proc: 

Второй один:

FindFactors:=proc(n,rels,deps) 
local fact, i, x, y; 
fact:=1; 
for i to nops(deps) while fact = 1 or fact = n do 
    x:=mul(j,j=rels[1]~deps[i]); 
    y:=isqrt(mul(j,j=rels[2]~deps[i])); 
    fact:=igcd(x+y,n) 
end do; 
if fact <> 1 and fact <> n then 
    ``(fact)*``(iquo(n,fact)) 
else 
    print("no trivial") 
end if; 
end proc: 

ответ

1

Там нет терминатор для предыдущей строки.

В незашифрованном код Notation 1D Maple, в предыдущей строке,

end if 

отсутствует операторный терминатор (либо двоеточие или точка с запятой). В этом причина ошибки.

Я замечаю, что в нескольких случаях; ваш код использует тот факт, что терминаторы не требуются в строках, предшествующих end if, end do, end proc и т. д. Возможно, вы заметили одну из опасностей этой привычки: когда вы редактируете и добавляете новое утверждение между такой строкой и end, который отслеживает его, вы должны помнить о добавлении терминатора утверждения в строку, которая больше не является «последней». Некоторые люди считают, что он просто окупается, чтобы все было просто и всегда использовало терминаторы терминалов, нужна ли им текущая строка или нет.

+0

Отлично! Можете ли вы взглянуть на второй, который я только что добавил, потому что это дает мне такую ​​же проблему. Каждый раз, когда я удаляю код x: = mul (j, j = rels [1] ~ deps [i]); y: = isqrt (mul (j, j = rels [2] ~ deps [i])); он не показывает ошибку, но мне она нужна. Что я делаю не так? – user3092043

+0

'j = rels [1] ~ deps [i]' является проблемой. Это недействительный синтаксис для чего-либо. Что вы намеревались этим сделать? Правая часть этого (независимо от права '=' sign') должна быть либо диапазоном (например, 'a..b', где' a' и 'b' оценивать целые числа), либо список или задавать. – acer

Смежные вопросы