Maple: Управляющие клавиши ИМС; замечания и предложения по его использованию и развитию, страница 12

            40. В определении пользовательской функции на основе функционального (->)-оператора можно наряду с процедурными переменными args и nargs использовать и RETURN-функцию для организации возврата результата вызова функции. Сказанное иллюстрирует следующий простой фрагмент:

> F:=() -> [assign('h'=sum(args[k]^2,k=1..nargs)/nargs),RETURN(evalf(sqrt(h)))];  Þ

> Digits:= 16:  F(3,10,32,37,52,57,95,99);  Þ  58.39627556616945

Это обстоятельство в ряде случаев может существенно упрощать программирование.

            41. В Help-системе языка по recipoly-функции некорректно указывается возвра-щаемое через ее третий фактический аргумент значение в случае нечетной степени те-стируемого полинома. В основном тексте нами представлено верное значение, которое тестируется следующей простой Test-процедурой с двумя формальными аргументами:

> Test(57*x^7+10*x^6+52*x^5+32*x^4+32*x^3+52*x^2+10*x+57,x); Þ

> Test(57*x^8+10*x^7+52*x^6+32*x^5+3*x^4+32*x^3+52*x^2+10*x+57,x);  Þ

Polynom has even degree

В качестве фактических аргументов Test-процедуре передается соответственно симметричный полином нечетной степени и ведущая переменная, а на выходе проце-дура возвращает исходный полином, формируя его на основе значения, передаваемо-го через третий аргумент recipoly-функции, и представленного нами в пункте 14.2.1 оп-ределяющего соотношения (10). Рекомендуется обратить внимание на организацию в процедуре разового вызова библиотечной recipoly-функции.

            42. Следует иметь в виду, что тестирование heap-структуры данных посредст-вом type-функции не является вполне достоверным, как это иллюстрирует следующий весьма простой фрагмент:

> T:=table([0=4,1=`IAN`,2=`REA`,3=`RAC`,4=`RANS`]):   type(T,heap),  eval(T);  Þ

> map(readlib,[stack,queue,heap]):   H:=heap[new](lexorder,`V`,`G`,`S`,`A`,`K`): \

           St:=stack[new](`V`,`G`,`S`,`A`,`K`):    Q:=queue[new](`V`,`G`,`S`,`A`,`K`): \

           map(type,[St,Q,H],stack), map(type,[St,Q,H],queue), map(type,[St,Q,H],heap); Þ

[true, true, true], [true, true, true], [true, true, true]

            Как следует из данного фрагмента, созданная Т-таблица, не соответствующая по организации heap-структуре данных (отсутствует "<"-вход для булевой процедуры упорядочивания элементов очереди), type-функцией тестируется как heap-структура. В последнем примере фрагмента покано, что данная ситуация является общей для стру-ктур данных {stack,queue,heap}-типа, т.е. type-функция не обеспечивает должного тес-тирования указанных структур данных. Причиной этого является общая для всех струк-тур табличная организация. Следующая простая процедура T_SQH позволяет класси-фицировать Maple-объекты на таблицы, heap-структуры и {stack,queue}-структуры:

> map(T_SQH,[T.(k$k=1..4)]);  Þ  [table, [stack, queue], [stack, queue], heap]

В заключение следует отметить, что по основному тексту книги также приводился целый ряд обнаруженных в процессе локальной апробации и эксплуатации средств па-кета особых и аварийных ситуаций. Читателю в процессе эксплуатации пакета наряду с описанными могут встретиться и другие особые и аварийные ситуации, с которыми ве-сьма желательно ознакомить службу сопровождения пакета, находящуюся по адресу:

Waterloo Maple Inc.,  450 Phillip Street,   Waterloo,  Ontario,  Canada   ON N2L 5J2

Приложение 4. Основные управляющие и дополнительные клавиши

Maple-пакета пятого релиза

            Приведен перечень клавиш, предназначенных для управления работой пакета и текущим документом в его среде; некоторые из них обнаружены в процессе апробации и эксплуатации пакета в Балтийском отделении Международной Академии Ноосферы.

    Таблица 39