Детализация
Сообщения
В пакете Mathematica предусмотрен механизм выведения сообщений при выполнении вычислений. Обычно это сообщения об ошибках и предупреждения. Имеется возможность приписывать сообщения любым символам. Чтобы приписать сообщение с именем tag символу symbol, выполните команду symbol::tag = "сообщение".
In[289]:=g: :lt = " Аргумент меньше нуля" Out[289] = Аргумент меньше нуля
Чтобы вывести сообщение, выполните команду Message[symbol::tag]:
In[290]:=Message[g: :lt]
g::lt: Аргумент меньше нуля
Теперь в определении функции можно задать вывод сообщения при выполнении некоторых условий:
In[291]: = g[x_] /; If[x < 0, Message [g: : lt] ; False, True] : = √x In[292]:=g[l] Out[292] = 1 In[293]:=g[-l]
g::lt: Аргумент меньше нуля
Out[293] = g [ - 1 ]
В сообщение можно вставить значение выражений expr1,expr2,..., выполнив команду Message[symbol::tag, expr1,expr2,...] , при этом ссылка на выражение expri внутри текста сообщения должна иметь вид 'i':
In[294] : = gg[х_] / ; If [x < 0 , Message [gg: : It, х] ; False, True] := √x gg::lt = "Аргумент '1' меньше нуля"; gg[-2]
gg::lt: Аргумент -2 меньше нуля
Out[296] = gg [-2]
Отключить сообщение можно командой Off[symbol : tag]:
In[297]:=Off [gg: :lt] gg[-i] Out[298]=gg [-1]
Включить сообщение можно командой On[symbol : tag]:
In[299]:=On[gg: :lt] gg[-i]
gg::lt: Аргумент -1 меньше нуля
Out[300] = gg [-1]
Вывести список всех сообщений, приписанных символу symbol, можно выполнив команду Messages[symbol]:
In[301] :=Messages [gg] Out[30l] = {HoldPattern[gg::It]: -> Аргумент '1' меньше нуля}
Встроенные функции, как правило, снабжены сообщениями о возможных ошибках. Например,
In[302]:=Sin[l,2,3]
Sin::argx: Sin called with 3 arguments; 1 argument is expected.>>
Out[302]= Sin[l, 2, 3]
Эти сообщения можно отключить командой Quiet, хотя правильней от этого программа не становится:
In[303]:=Quiet@Sin[l, 2, 3] Out[303] = Sin[l, 2, 3]
Список сообщений для встроенных функций загружается в Mathematica по мере необходимости. При этом сначала Mathematica ищет сообщение с указанным именем среди сообщений, приписанных обрабатываемой функции. Если его там нет, программа переходит к просмотру списка сообщений для встроенного символа General. Так, в нашем примере сообщение Sin::argx получено именно из списка General. У самой функции Sin список сообщений пуст.
In[304] :=Messages [Sin] Out[304]={ } In[305] := Style [Messages [General] , FontSize -> 6] Out[305] = {HoldPattern[General::appname]: -> The name '1' is not valid for the application. A valid name smarts with a letter and is followed by lexers and digits., HoldPattern [General::argx]: -> '1' called with '2' arguments; 1 argument is expected., HoldPattern [Generall::bktwrn]: -> " '1' " represents multiplication; use " '2' " to represent a function. '4', HoldPattern[General:: catname]: -> The name '1' is not valid for the category. A valid name starts with a letter and is followed by letters and digits., HoldPattern[General::file] : -> ' 2 ' was encountered where a '1' primitive or directive was expected., HoldPattern[General: :meprec] : -> Internal precision limit $MaxExtraPrecision = '1' reached while evaluating '2'., HoldPattern [General: :multedge] : -> The input graph has multiple edges between some vertices. These will be collapsed into single edges with weight equal to the sum of the individual edges., HoldPattern[General::newsym] : -> $off[], HoldPattern[General::nfunfail] : -> $off[], HoldPattern[General: :nosite] :-> Site '1' is not an existing Paclet site., HoldPattern[General: :obsppkgfn]: -> $Off [] , HoldPattern[General::offline]: -> Mathematica is currently configured not to use the Internet. To allow Internet use, check the "Allow Mathematica to use the Interne" box in ohe Help > Internet Connectivity dialog., HoldPattern [General: : oldversion] :-> Connections to kernls older than Version 2.2 are not supported. This kernel is version '1'., HoldPattern [General::partw] : -> Part '1' of '2' does not exist., HoldPattern[General::pclt]: -> '1' does not refer to a known paclet., HoldPattern[General::pcltn] : -> No appropriate paclet with name '1' was found., HoldPattern[General::pcltni] : -> No appropriate paclet with name '1' is installed., HoldPattern[General::pcltnv]: -> No appropriate paclet with name '1' and version '2' was found., HoldPattern[General::pcltnvi] : -> No appropriate paclet with name '1' and version '2' is installed., HoldPattern[General::plnr]: -> $off[], HoldPatern[General::pp3tr] : -> $off[], HoldPattern[General::pptr]: -> $off[], HoldPattern[General::prefdir]: -> The preferences directory '1' cannot be created., HoldPattern[General::shdw]: -> Symbol '1' appears in multiple contexts '2'; definitions in Context '3' may shadow or be shadowed by other definitions., HoldPatern[General::shdwcor]: -> Symbol '1' defined in '2' already exists in '3'. Select the version you want to use: '4'., HoldPattern[General::spell]: -> $Off[], HoldPattern[General::spell]: -> $Off[], HoldPattern[General::stop]: -> Further output of '1' will be suppressed during this calculation., HoldPattern[General::string]: -> String expected at position '1' in '2'., HoldPattern [General::stringopt]: -> '1' in '2' is not a string. All options to '3' must be strings., HoldPattern [General::sysmain]: -> Error loaning the main binary file '1'. Get["sysmake.m"] must be run before continuing., HoldPattern[General::write]: -> Tag '1' in '2' is Protected., HoldPattern[General::writewarn] : -> Defining rule for '1'.)