* Данный текст распознан в автоматическом режиме, поэтому может содержать ошибки
Язык программирования систем Mathematica
1095
• Unprotect[s1, s2, ...] – удаляет атрибут защиты от модификации Protected для символов si, что делает возможной их модификацию. • Unprotect[\"form1\", \"form2\", ...] – снимает защиту всех символов, име на которых текстуально (по буквам) сопоставимы с любым из указанных formi. Примеры на применение средств модификации функций уже приводились. Следующие атрибуты и директивы также используются при управлении мо дификацией: • NProtectedAll – атрибут, устанавливающий, что ни один из аргументов функции не будет модифицирован при применении N[ ]. • NProtectedFirst – атрибут, указывающий, что первый аргумент функции не будет модифицирован применением N[ ]. • NProtectedRest – атрибут, устанавливающий, что все аргументы после первого аргумента функции не будут модифицированы применением N[ ]. Мы уже рассматривали модификацию функций, в частности снятие и назначе ние атрибутов защиты. Отметим лишь, что из последующих примеров будет ясно, что эти операции широко применяются в пакетах расширений.
14.3.17. Практика подготовки пакетов расширений и применений
Наиболее сложным моментом работы с системой Mathematica является разработ ка пакетов расширения профессионального качества. Именно такие пакеты по зволяют приспособить всю мощь системы к решению тех задач, которые полезны конкретному пользователю. В файловой системе Mathematica 4/5 можно найти множество уже подготов ленных пакетов расширения. Поэтому ограничимся примером пакета, который содержит определение функции AlgExpQ[expr], позволяющей выяснить, являет ся ли выражение expr алгебраическим:
(* :Title: AlgExp *) (* :Context: ProgrammingInMathematica`AlgExp` *) BeginPackage["ProgrammingInMathematica`AlgExp`"] AlgExpQ::usage = "AlgExpQ[expr] returns true if expr is an algebraic expression." Begin["`Private`"] SetAttributes[AlgExpQ, Listable] AlgExpQ[ _Integer ] = True AlgExpQ[ _Rational ] = True AlgExpQ[ c_Complex ] := AlgExpQ[Re[c]] && AlgExpQ[Im[c]] AlgExpQ[ _Symbol ] = True AlgExpQ[ a_ + b_ ] := AlgExpQ[a] && AlgExpQ[b] AlgExpQ[ a_ * b_ ] := AlgExpQ[a] && AlgExpQ[b] AlgExpQ[ a_ ^ b_Integer ] := AlgExpQ[a] AlgExpQ[ a_ ^ b_Rational ] := AlgExpQ[a] AlgExpQ[_] = False End[] EndPackage[]