operator

Задайте новый символ оператора

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

operator(symb, f, <Prefix | Postfix | Binary | Nary, prio>, <Global>)
operator(symb, Delete, <Global>)

Описание

operator(symb, f, T, prio) задает новый символ оператора symb из типа T с приоритетом prio. Функциональный f выполняет выражения с помощью нового оператора.

operator(symb, Delete) удаляет определение символа оператора symb.

operator используется, чтобы задать новые пользовательские символы оператора или удалить их.

Учитывая символ оператора "++", Скажем, с оценкой функционального f, следующие выражения создаются синтаксическим анализатором, в зависимости от типа оператора:

  • Prefix:

    Вход ++x результаты в f(x).

  • Postfix:

    Вход x++ результаты в f(x).

  • Binary:

    Вход x ++ y ++ z результаты в f(f(x, y), z).

  • Nary:

    Вход x ++ y ++ z результаты в f(x, y, z).

Там может существовать символы оператора, которые являются префиксами других символов оператора. Сканер читает как можно больше символов и выбирает самый длинный символ оператора соответствия. См. Пример 3.

Не возможно задать два оператора с тем же символом. Таким образом, нельзя задать унарный ++ и бинарный ++ одновременно.

Следующие ограничения существуют для строки символа оператора symb:

  • Это не может быть более длинно, чем 32 символа.

  • Это не может запуститься с пробела.

  • Это не может запуститься с \ (обратная косая черта) символ.

Таким образом, строки " @" и "/" не позволены. Обратите внимание на то, что в настоящее время operator не проверяет эти ограничения.

Могут быть переопределены встроенные операторы.

Не возможно задать - фиксируют операторы как |x | или или другие типы с 3 не операторов.

Новый символ оператора также используется, если файлы читаются за одним исключением: если файл читается с функциональным read использование опции Plain, новый оператор не учтен. (Эта опция используется, если файлы библиотеки MuPAD® читаются, потому что в противном случае пользовательские операторы могли изменить значение исходного кода неконтролируемым способом.)

Если оператор задан при чтении файла с опцией Plain, определение будет использоваться в остатке от файла и затем удаляться автоматически. Если оператор задан с опцией Global, это поведение изменяется, и оператор не будет активен при чтении файла, но будет существовать на интерактивном уровне вместо этого.

Взаимодействия среды

Новый символ оператора symb известен синтаксическим анализатором и может использоваться, чтобы ввести выражения. Новый символ оператора не будет использоваться при чтении файлов с помощью функционального read с опцией Plain.

Функциональный f соответствие новому оператору будет всегда преобразовываться в function environment содержа дополнительную программу вывода для оператора выход, если это уже не содержало программу вывода.

Примеры

Пример 1

В этом примере показано, как задать символ оператора для операции сдвига разряда (как на языке C):

bitshiftleft := (a, b) -> a * 2^b:
operator("<<", bitshiftleft, Binary, 950):

После этого вызова, символ << может использоваться, чтобы ввести выражения:

2 << 1, x << y

operator("<<", Delete):

Пример 2

Идентификаторы могут использоваться в качестве символов оператора:

operator("x", _vector_product, Binary, 1000):
PRETTYPRINT := FALSE:
print(Plain, a x b x c)
(a x b) x c
PRETTYPRINT := TRUE:
operator("x", Delete):

Пример 3

Этот пример показывает, что сканер пытается совпадать с самым длинным символом оператора:

operator("~", F, Prefix, 1000):
operator("~>", F1, Prefix, 1000):
operator("~~>", F2, Prefix, 1000):
print(Plain, ~~ x, ~~> x, ~ ~> x, ~~~> x)
~ ~ x, ~~> x, ~ ~> x, ~ ~~> x
operator("~", Delete):
operator("~>", Delete):
operator("~~>", Delete):

Параметры

symb

Символ оператора: символьная строка.

f

Функция, оценивающая выражения с помощью оператора.

prio

Приоритет оператора: целое число между 1 и 1999. Значение по умолчанию 1300.

Опции

Prefix

Оператор рассматривается как унарный оператор с префиксной нотацией. Учитывая символ оператора "++" и оценка функционирует f, вход ++x анализируется как выражение f(x).

Postfix

Оператор рассматривается как унарный оператор с постфиксным обозначением. Учитывая символ оператора "++" и оценка функционирует f, вход x++ анализируется как выражение f(x).

Binary

Оператор рассматривается как неассоциативный бинарный оператор с инфиксной нотацией. Учитывая символ оператора "++" и оценка функционирует f, вход x ++ y ++ z анализируется как выражение f(f(x, y), z), т.е. оператор связывает слева направо.

Nary

Оператор рассматривается как ассоциативный оператор не с инфиксной нотацией. Учитывая символ оператора "++" и оценка функционирует f, вход x ++ y ++ z анализируется как выражение f(x, y, z).

Delete

Оператор с символом symb удален

Global

При определении оператора в библиотеке или коде пакета (технически: в файле, который читается с опцией Plain), опция Global изменяет значение определения оператора: Вместо того, чтобы задать оператор для остатка от файла, это задает оператор для интерактивного уровня.

Возвращаемые значения

Пустой объект типа DOM_NULL.

Алгоритмы

Когда сканер читает новую лексему, он сначала отбрасывает любой пробел и символы обратной косой черты. Затем это пытается совпадать с пользовательскими символами оператора. Самый длинный пользовательский символ оператора, совпадающий с отсканированными символами, сделан следующей лексемой. Если никакой пользовательский символ оператора не соответствует, это сканирует для встроенных лексем.

Синтаксический анализатор использует и рекурсивное убывание и парсинг приоритета оператора. Встроенные и пользовательские операторы анализируются с помощью приоритета оператора.