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).

  • Двоичный файл:

    Вход x ++ y ++ z приводит к f(f(x, y), z).

  • Nary:

    Вход x ++ y ++ z приводит к f(x, y, z).

Там может существовать символы оператора, которые являются префиксами других символов оператора. Сканер читает как можно больше символов и выбирает самый длинный символ оператора соответствия. Cf. Пример 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.

Алгоритмы

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

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