printРаспечатайте объекты на экран
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
print(<Unquoted>, <NoNL>, <KeepOrder>, <Plain>, <Typeset>, object1, object2, …)
print(object) отображает object на экране.
На интерактивном уровне результат команды MuPAD®, вводимой в командную строку, обычно отображается на экране автоматически. print служит, чтобы сгенерировать дополнительный вывод из циклов или процедур.
Кроме некоторых исключений, упомянутых ниже, вывод, сгенерированный print, идентичен обычному выводу результатов MuPAD на интерактивном уровне.
print оценивает свои аргументы последовательно слева направо (cf. Пример 3) и отображения результаты на экране. Отдельные выходные параметры разделяются запятыми. Новая строка запускается в конце вывода, если это не подавлено опцией NoNL.
Вывод width для print с опцией Plain ограничивается переменной окружения TEXTWIDTH. Cf. Пример 4.
С опцией Plain стиль вывода определяется значением переменной окружения PRETTYPRINT. Cf. Пример 5.
print убывает рекурсивно в операнды объекта. Для каждого подобъекта s print сначала определяет свою область typeT. Если доменный T имеет слот "print", то print издает приказ T::print(s) к стандартной программе слота. В отличие от перегружающегося механизма для большинства других функций MuPAD, print обрабатывает результат этого вызова рекурсивно, и результат рекурсивного процесса распечатан в положении s (cf. Пример 6.
Результат, возвращенный методом "print", не должен содержать доменный элемент сам s как подобъект, поскольку это приводит к бесконечной рекурсии (cf. Пример 7. Тот же комментарий также применяется к выходным процедурам функциональных сред (см. ниже).
Если T является областью библиотеки без слота "print", и внутренними операндами s является op1, op2, ..., то s распечатан как new(T, op1, op2, ...). (См. Пример 6.)
Методы "print" могут возвращаемые строки или выражения. Строки всегда распечатываются закрывшие кавычки. Выражения распечатаны в режиме normal mode. Если они будут содержать строки, они будут распечатаны с кавычками. Cf. Пример 8.
Вывод expression определяется 0th операндом выражения. Если 0th операндом является function environment, то его второй операнд обрабатывает вывод выражения. Смотрите Пример 9. В противном случае выражение распечатано в функциональном обозначении.
В отличие от обычного вывода объектов MuPAD на интерактивном уровне, print не выполняет перезамену псевдонимов (см. Pref::alias для деталей). Кроме того, стандартные программы, заданные через Pref::output и Pref::postOutput, не вызваны print. Cf. Пример 14.
Вывод floating-point numbers зависит от переменной окружения DIGITS и настройки Pref::floatFormat (экспоненциальное или представление с плавающей точкой) и Pref::trailingZeroes (печать конечных нулей). Cf. Пример 16.
print чувствителен к переменным окружения DIGITS, PRETTYPRINT и TEXTWIDTH, и к выходным настройкам Pref::floatFormat, Pref::keepOrder и Pref::trailingZeroes.
Этот пример показывает простой вызов print со строками в качестве аргументов. Они распечатаны с кавычками:
print("Hello", "You"." !"):![]()
На наборе поддержки платформ print может сгенерировать набранный вывод:
print(Typeset, int(f(x)/g(x), x = a..b)):

print использует опцию Typeset по умолчанию:
print(int(f(x)/g(x), x = a..b)):

ASCII вывод доступен с опцией Plain:
print(Plain, int(f(x)/g(x), x = a..b)):
b / | f(x) | ---- dx / g(x) a
Как большинство других функций, print оценивает свои аргументы. В следующем вызове x оценивает к 0, и cos(0) оценивает к 1:
a := 0: print(cos(a)^2):
![]()
Используйте hold, если вы хотите распечатать выражение cos(a)^2 буквально:
print(hold(cos(a)^2)):
![]()
delete a:
print с опцией Plain чувствителен к текущему значению TEXTWIDTH:
print(Plain, expand((a + b)^4)):
4 3 2 2 3 4 a + 4 a b + 6 a b + 4 a b + b
TEXTWIDTH := 25: print(Plain, expand((a + b)^4)):
4 3 2 2
a + 4 a b + 6 a b
3 4
+ 4 a b + b
Если вы отключаете режим структурной распечатки программы, функция print вставляет символ продолжения строки в разрывах строки:
PRETTYPRINT:=FALSE: print(Plain, expand((a + b)^4)):
a^4 + 4*a^3*b + 6*a^2*b^\ 2 + 4*a*b^3 + b^4
Символ продолжения строки может быть недопустимым для некоторых строк. Например, когда вы используете генераторы кода, такие как generate::MATLAB и generate::Simscape, отображенный код, содержащий символ продолжения строки, не допустим. Чтобы постараться не вставлять этот символ, измените настройки TEXTWIDTH или используйте функцию fprint вместо print:
fprint(Unquoted, 0, expand((a + b)^4))
a^4 + 4*a^3*b + 6*a^2*b^2 + 4*a*b^3 + b^4
Кроме того, смотрите Пример 4 на странице справки fprint.
PRETTYPRINT := TRUE: delete TEXTWIDTH:
print с опцией Plain чувствителен к текущему значению PRETTYPRINT:
print(Plain, a/b): old := PRETTYPRINT: PRETTYPRINT := FALSE: print(Plain, a/b): PRETTYPRINT := old:
a - b
a/b
delete old:
Мы демонстрируем, как достигнуть отформатированного вывода для элементов пользовательской области. Предположим, что мы хотим записать новый доменный Complex для комплексных чисел. Каждый элемент этой области имеет два операнда: действительная часть r и мнимая часть s:
Complex := newDomain("Complex"): z := new(Complex, 1, 3):
z + 1;
print(Plain, z + 1):![]()
new(Complex, 1, 3) + 1
Теперь мы хотим более хороший вывод для элементов этой области, а именно, в форме r+s*I, где I обозначает мнимую единицу. Мы реализуем стандартную программу слота Complex::print, чтобы обработать это. Эта стандартная программа слота будет вызвана MuPAD с элементом доменного Complex в качестве аргумента каждый раз, когда такой элемент должен быть распечатан на экране:
Complex::print := (z -> extop(z, 1) + extop(z, 2)*I): z + 1; print(Plain, z + 1):
![]()
1 + 3 I + 1
delete Complex, z:
Результат метода "print" не должен содержать аргумент как подобъект; в противном случае это приводит к бесконечной рекурсии. В следующем примере стандартная программа слота T::print назывался бы бесконечно часто. MuPAD пытается захватить такие бесконечные рекурсии и распечатывает `????` вместо этого:
T := newDomain(T): T::print := id: new(T, 1); print(Plain, new(T, 1)):
`????`
`????`
delete T:
Если метод "print" возвратит строку, он будет распечатан закрывший кавычки:
Example := newDomain("Example"): e := new(Example, 1):
Example::print := x -> "elementOfExample":
print(e):![]()
Если "print" - метод возвратит выражение, он будет распечатан в режиме normal mode. Если выражение будет содержать строки, они будут распечатаны обычным способом с кавычками:
Example::print := x -> ["elementOfExample", extop(x)]: print(e):
![]()
delete Example, e:
Предположим, что вы задали функциональный f, который может возвратить себя символически, и вы хотите, чтобы такие символьные выражения формы f(x,...) были распечатаны специальным способом. С этой целью встройте свой proceduref в функциональную среду и предоставьте выходную процедуру в качестве второго аргумента к соответствующему вызову funcenv. Каждый раз, когда выражение формы, f(x,...) должен быть распечатан, выходная процедура, будет вызвано аргументами x,... выражения:
f := funcenv(f,
proc(x) begin
if nops(x) = 2 then
"f does strange things with its arguments ".
expr2text(op(x, 1))." and ".expr2text(op(x,2))
else
FAIL
end
end):delete a, b: f(a, b)/2; f(a, b, c)/2
![]()
![]()
delete f:
С опцией Unquoted не использованы кавычки:
print(Unquoted, "Hello", "World"." !"):
Hello, World !
С Unquoted специальные символы расширены \t и \n:
print(Unquoted, "As you can see,\n".
"'\\n' is the newline character\n".
"\tand '\\t' a tabulator"):As you can see, '\n' is the newline character and '\t' a tabulator
Полезно создать выводимые строки с помощью expr2text и оператора конкатенации .:
d := 5: print(Unquoted, "d plus 3 = ".expr2text(d + 3)):
d plus 3 = 8
delete d:
С опцией NoNL никакая новая строка не помещается в конце вывода, и PRETTYPRINT неявно установлен в FALSE. Кроме этого, поведение совпадает с с опцией Unquoted:
print(NoNL, "Hello"): print(NoNL, ", You"." !\n"): print(NoNL, "As you can see, PRETTYPRINT is FALSE: "): print(NoNL, x^2-1): print(NoNL, "\n"):
Hello
, You !
As you can see, PRETTYPRINT is FALSE:
x^2 - 1
Если опция, которую KeepOrder дан, суммы, распечатана в их внутреннем порядке:
print(b - a): print(KeepOrder, b - a):
![]()
![]()
Исказите перезамену (см. Pref::alias), происходит для нормального результата выходные параметры на интерактивном сеансе, но не для выходных параметров, сгенерированных print:
delete a, b: alias(a = b): a; print(a): unalias(a):
![]()
![]()
В отличие от обычного результата вывод, print не реагирует на Pref::output:
old := Pref::output(generate::TeX): sin(a)^b; print(sin(a)^b): Pref::output(old):
![]()
![]()
То же самое верно для Pref::postOutput:
old := Pref::postOutput("postOutput was called"):
a*b; print(a*b):
Pref::postOutput(old):![]()
postOutput was called
![]()
delete old:
Вывод слагаемых суммы зависит от формы этих слагаемых. Если слагаемое является выражением _mult, только первый и последний операнд продукта учтен для определения знака того термина в выводе. Если один из них является отрицательным числом затем "+" - символ в сумме заменяется "-" - символ:
print(hold(a + b*c*(-2)),
hold(a + b*(-2)*c),
hold(a + (-2)*b*c)):![]()
Это должно быть учтено при записи "print" - методы для полиномиальных областей.
Числа с плавающей точкой обычно распечатываются в представлении с фиксированной точкой. Можно изменить это на форму с плавающей точкой с мантиссой и экспонентой через Pref::floatFormat:
print(0.000001, 1000.0): old := Pref::floatFormat("e"):
print(0.000001, 1000.0): Pref::floatFormat(old):![]()
![]()
В выводе по умолчанию чисел с плавающей запятой отключены конечные нули. Это поведение может быть изменено через Pref::trailingZeroes:
![]()
![]()
print(0.000001, 1000.0): old := Pref::trailingZeroes(TRUE): print(0.000001, 1000.0): Pref::trailingZeroes(old):
0.000001, 1000.0
0.000001000000000, 1000.000000
Количество цифр чисел с плавающей запятой в выводе зависит от переменной окружения DIGITS:
print(float(PI)): DIGITS := 20: print(float(PI)): DIGITS := 30: print(float(PI)):
![]()
![]()
![]()
delete old, DIGITS:
Выходной порядок sets отличается от внутреннего порядка наборов, который возвращен op:
s := {a, b, 1}:
s;
print(Plain, s):
op(s)![]()
{1, a, b}
![]()
Индексный оператор [] может использоваться, чтобы получить доступ к элементам набора относительно выходного порядка:
s[1], s[2], s[3]
![]()
delete s:
Вывод области определяется ее слотом "Name", если он существует, и в противном случае его ключом:
T := newDomain("T"):
T;
print(Plain, T):![]()
T
T::Name := "domain T": T; print(Plain, T):
![]()
domain T
delete T:
Иногда желательно объединить строки с “симпатичными” выражениями в выводе. Это не возможно через expr2text. С другой стороны, вывод с запятыми как разделители обычно рассматривается как ужасный. Следующая фиктивная последовательность выражения может использоваться, чтобы достигнуть желаемого результата. Это использует MuPAD внутренняя функция для стандартного оператора вывод builtin(1100,...), с приоритетом 20 — приоритет _exprseq — и с пустым символом оператора "":
myexprseq := funcenv(myexprseq,
builtin(1100, 20, "", "myexprseq")):
print(Unquoted,
myexprseq("String and pretty expression ", a^b, ".")):
b
String and pretty expression a .
delete myexprseq:
Если опция, Typeset объединен с Unquoted или NoNL, предупреждением, дана, и Typeset проигнорирован:
print(Typeset, Unquoted, "1"):
Warning: Conflicting options, ignoring 'Typeset' [print]
Для более тщательно продуманных конструкций можно хотеть объединить многострочные строки с выражениями MuPAD. Первая попытка может быть похожей на следующее:
myexprseq := funcenv(myexprseq,
builtin(1100, 20, "", "myexprseq")):
Example := newDomain("Example"):
Example::print :=
x -> myexprseq("--- \n--\n-\n--\n---", op(x)):
e := new(Example, 1):
print(Plain, e):"--- \n--\n-\n--\n---"1
Очевидно, этот подход не работает. Возвращаемое значение метода "print", заданного выше, не является строкой, это - (специальная) последовательность, таким образом, специальные правила для печати строки не применяются. Нам была бы нужна другая область, которая просто берет строку и возвращает точно эту строку в ее слот "print". К счастью, MuPAD уже имеет такую область, stdlib::Exposed:
Example::print :=
x -> myexprseq(stdlib::Exposed("--- \n--\n-\n--\n---"),
op(x)):
print(e):--- -- - 1 -- ---
Для выражений с более высоким выводом вы видите, что выравнивание строки является постоянным:
new(Example,x^(1/n)); new(Example,x/y)
--- -- 1/n - x -- ---
--- -- x - - -- y ---
Чтобы изменить это выравнивание, замените \n \b, таким образом, делая строку, это отключает “базовую линию” строки:
Example::print :=
x -> myexprseq(stdlib::Exposed("--- \b--\n-\n--\n---"),
op(x)):
print(e+2):--- 1 + 2 -- - -- ---
Когда несколько, \b появляется в строке, первая, взяты в качестве определения базисной линии:
Example::print :=
x -> myexprseq(stdlib::Exposed("--- \n--\n-\b--\b---"),
op(x)):
print(e+2):--- -- - 1 + 2 -- ---
|
Любые объекты MuPAD |
|
При использовании этой опции символьные строки отображены без кавычек. Кроме того, управляющие символы Управляющий символ
ПримечаниеОпция |
|
Эта опция имеет ту же функциональность как Кроме того, эта опция неявно устанавливает ПримечаниеОпция |
|
Эта опция определяет порядок условий в суммах. Обычно, система сортирует условия Этим поведением можно также управлять через Pref::keepOrder(Always): print(...): Pref::keepOrder(%2): |
|
Вывод находится в режиме простого текста. Это - поведение по умолчанию в версии программы. В текстовом режиме значение |
|
Вывод находится в наборном режиме. Это - поведение печати по умолчанию в блокноте, если никакие другие опции не даны. Опция только сохранена для обратной совместимости. В наборном режиме проигнорировано значение |
print возвращает пустой объект null() типа DOM_NULL.
object1, object2
Выходной порядок sets отличается от внутреннего порядка наборов, которые могут быть получены через op. Для этого переупорядочения в выводе, вызовы ядра метод DOM_SET::sort, который берет набор в качестве аргумента и возвращает отсортированный список. Элементы набора затем распечатаны в распоряжении, данном этим списком.
DIGITS | PRETTYPRINT | Pref::floatFormat | Pref::keepOrder | Pref::trailingZeroes | TEXTWIDTH | doprint | expose | expr2text | finput | fprint | fread | funcenv | input | protocol | read | strprint | write