Опубликован: 27.12.2010 | Уровень: специалист | Доступ: платный
Лекция 4:

Детализация

Сообщения

В пакете 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'.)
Светлана Петрова
Светлана Петрова
Украина
Марина Семенова
Марина Семенова
Россия, г. Чебоксары