Обьясните, пожалуйста, что это за Error

Форум пользователей пакета Maple

Модератор: Admin

K@sper
Сообщения: 4
Зарегистрирован: Вт янв 15, 2008 7:09 am
Откуда: Харьков

Обьясните, пожалуйста, что это за Error

Сообщение K@sper » Пт мар 28, 2008 4:56 am

При вызове процедуры пишет мне "illegal use of formal parameter". Что он мне этим хочет сказать?
Для большей ясности объясню суть проблемы.
Есть у меня некие начальные исходные данные a,b,c,d. Есть некие процедуры proc1(), proc2(), proc3(), которые используют в своих расчетах эти исходные данные и выдают некий результат.
Вот в таком виде все прекрасно работало:
a:=1:
b:=2:
c:=3:
d:=4:
proc1():
proc2():
proc3():

Потом у меня возникла потребность по очереди варьировать исходные данные. Для этого я создал массивы и по очереди вместо одной из переменных подставлял массив. Например для варьирования переменной "a" это имело следующий вид:
a:=1:
b:=2:
c:=3:
d:=4:
N_a:=10:
arr_a:=array(1..N_a):
arr_a[i]:=#генерирую значения элементов массива

#дальше в цикле перебираю все значения "а"
#b,c,d остаются постоянными
for i from 1 by 1 to N_a do
a:=arr_a[i]
proc1():
proc2():
proc3():
end do:

В таком виде это тоже прекрасно работает. Но поскольку у меня исходных данных не 4, а 12 и все их надо проварьировать, а внутри вышеописанного цикла довольно обьемный код, то возникает логическое желание создать из всего этого процедуру с параметрами и просто вызвать ее 12 раз. Что я и делаю:
my_proc:=proc(N_x,x,arr_x)
for i from 1 by 1 to N_x do
x:=arr_x[i]
proc1():
proc2():
proc3():
end do:
end proc:

При вызове процедуры my_proc(N_a,a,arr_a); он мне торжественно говорит: "illegal use of formal parameter". В хелпе по этому поводу ничего внятного не нашел.

aar
Сообщения: 100
Зарегистрирован: Чт авг 10, 2006 11:27 am

Сообщение aar » Пт мар 28, 2008 8:44 am

Нельзя формальному параметру присваивать значение:

x:=arr_x[i]

(тут еще не хватает ; или : )

Заведите локальный параметр:

my_proc:=proc(N_x,x,arr_x)
local X;
for i from 1 by 1 to N_x do
X:=arr_x[i];
...

Андрей М.
Сообщения: 239
Зарегистрирован: Чт апр 21, 2005 3:15 pm

Сообщение Андрей М. » Пт мар 28, 2008 9:48 am

aar, коли решили дать совет, то пользуйтесь корректно и терминологией, и понятиями. В Maple под формальными параметрами понимаются те, которые указываются в заголовке определения процедуры proc(x,y,...). В отличие от фактических, передаваемых при ее вызове. То же, о чем написали вы, называются глобальными переменными и им можно присваивать значения в теле процедуры, предварительно определив их в global-секции. Можно и без определения, но тогда для присвоения следует использовать assign Все эти детали прекрасно описаны, например, здесь

http://www.aladjev-maple-book.narod.ru

КСтати, даже даже формальным параметрам можно присваивать значения и это также вы найдете в указанной ссылке. Можно дать еще пару советов, но спешу. Вместе с тем, очень желательно, чтобы изначально начинающие получали корректные советы, а не отсебятину.