ВУЗ:
Составители:
С помощью знака :: после имени переменной можно определить ее тип. Несоответствие фактиче-
ских параметров типу заданных переменных ведет к сообщению об ошибке и к отказу от выполнения
процедуры.
При рассмотрении ветвления, было предложено решение квадратного уравнения. Оформим это ре-
шение в виде процедуры. Объявим фактические параметры алгебраическим типом, в который входят
целые, дробные и числа с плавающей точкой.
> A:=proc(a::algebraic,b::algebraic,c::algebraic)
local d;
description "Решение квадратного уравнения";
d:=b^2-4*a*c;
if d>0 then (-b+sqrt(d))/2/a,(-b-sqrt(d))/2/a
elif d=0 then -b/2/a
else print(`Действительных корней нет !!!`)
end if;
end proc;
A
,,::a algebraic ::b algebraic ::c algebraic
p
roc
() :=
local
;d
descri
p
tion
;"Решение квадратного уравнения"
:=d
−
^b 2
××
4 ac;
<
0 d ,
×
/12
(
)
/
− +
b
(
)
s
q
r
t
da
×
/12
(
)
/
− −
b
(
)
s
q
r
t
da
if then
=
d 0
−×
/12 /ba
elif then
()print `Действительных корней нет !!!`
else
end if
end
p
roc
> A(1,12,3);
,
−
+ 6 33
−
− 6 33
> A(1,8.5,3);
,-0.3689563260 -8.131043675
> A(12,4,2);
Действительных корней нет !!!
Если в качестве параметра будет подставлено значение недопустимого типа, это приведет к ошибке и
сообщению о недопустимом типе параметра.
> A(12,"4",6);
Error, invalid input: A expects its 2nd argument, b, to be of type algebraic, but received 4
Если в теле процедуры имеются операции присвоения для ранее определенных (глобальных) пере-
менных, то изменение их значений в ходе выполнения процедуры создает так называемый побочный
эффект. Он способен существенно изменить алгоритм решения задач, и поэтому, как правило, недо-
пустим. Встречая такие операции присвоения, Maple корректирует текст процедуры, добавляя в нее
объявление переменных с помощью local. При этом выдается предупреждение вида:
Warning, `d` is implicitly declared local to procedure `A`
Если все-таки работа с глобальными переменными внутри процедуры необходима, то эти перемен-
ные должны быть объявлены в процедуре с помощью global.
Следует отметить, что нельзя делать глобальными переменные, указанные в списке параметров про-
цедуры, поскольку они уже фактически объявлены локальными. Такая попытка приведет к появле-
нию сообщения об ошибке.
Расширяющие ключи используются для детальной настройки процедуры.
Ключ operator определяет, что c процедурой можно работать как с оператором, а ключ arrow до-
полнительно показывает, что оператор записывается в стрелочной нотации. Покажем на примере:
> f:=proc(x) option operator, arrow; sin(x)+cos(x) end;
:=
f
→
x
+ ()sin
x
()cos
x
Последняя процедура эквивалентна записи:
,
Страницы
- « первая
- ‹ предыдущая
- …
- 41
- 42
- 43
- 44
- 45
- …
- следующая ›
- последняя »