misc:: maprec

Сопоставьте функцию с подвыражениями выражения

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

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

Синтаксис

misc::maprec(ex, selector = funci, …, <PreMap | PostMap>, <NoOperators>, <Unsimplified>)

Описание

misc::maprec(ex, selector=funci) сопоставляет функциональный funci со всеми подвыражениями выражения ex, которые удовлетворяют данный критерий (заданный selector), и заменяет каждое выбранное подвыражение s funci(s).

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

misc::maprec(ex, selector1 = funci1, …, selectorn = funcin) выполняет два шага: это тестирует, соответствует ли ex критерию выбора, заданному некоторым селекторным selector_k (и, если да, ex замен funci_k(ex)); и это применяет себя рекурсивно ко всем операндам ex. Порядок этих шагов определяется опциями PreMap и PostMap.

Селекторы применяются слева направо; если выражение соответствует некоторому критерию выбора, никакие дальнейшие селекторы не пробуют.

selector может иметь две формы. Это может быть набор {t 1, …, t n}. Здесь s подвыражения ex выбран, если тип (s1) является одним из типов t 1, …, t n. Если это не набор, подвыражение, s ex выбран, если p возвращает TRUE. Когда каждый объект MuPAD® может быть применен как функция к s, p может иметь любой тип в последнем случае.

По порядку, чтобы не выбрать подвыражение, селекторная потребность не возвращает FALSE; это удовлетворяет, что не возвращает TRUE.

Если ни опция PreMap, ни опция, которую дан PostMap, то PreMap используется.

Используйте команду misc::breakmap в funci в порядке остановить рекурсивное отображение. Смотрите страницу справки misc::breakmap для примера.

Примечание

Только подвыражения доменного типа, DOM_ARRAY, DOM_EXPR, DOM_LIST, DOM_SET и DOM_TABLE сопоставлены рекурсивно, а также доменные элементы доменного T, для которого слот T::enableMaprec существует и равняется TRUE; слот T::map, работающий правильно, должен затем существовать, также. К подвыражениям других типов применяется selector, но misc::maprec не сопоставлен с их операндами. (Это должно избежать нежелательных замен.), Если вы хотите рекурсивно вызвать их, или добавить enableMaprec - слот, или используют selector, который выбирает такие подвыражения, и заставьте funci инициировать другое рекурсивное отображение.

misc::maprec является сверхзагружаемым. Если область подвыражения имеет метод "maprec", то этот метод вызван подвыражением и другими аргументами вызова.

Примечание

Подвыражение заменяется результатом, но misc::maprec не сопоставлен со своими операндами; такое рекурсивное отображение должно быть сделано доменным методом при желании.

Примечание

Операторы выражений (op(expression, 0)) также сопоставлены рекурсивно как все другие операнды. Используйте NoOperators, чтобы выключить это.

Примеры

Пример 1

В следующем примере каждое целое число данного выражения a+3+4 заменяет значение 10. Поскольку 10(n) возвращает 10 для каждого целочисленного n, это достаточно, чтобы записать 10 вместо n -> 10 здесь.

misc::maprec(hold(a+3+4), {DOM_INT} = 10)

В примере выше, мы использовали hold, чтобы подавить оценку выражения, потому что в противном случае a+3+4 оценен к a+7, и мы получаем результат:

misc::maprec(a+3+4, {DOM_INT} = 10)

Упрощения получившегося 10 + 10 к 20 можно избежать при помощи опции Unsimplified:

misc::maprec(hold(a+3+4), {DOM_INT} = 10, Unsimplified)

Пример 2

Теперь мы даем пример, где selector является функцией. Мы хотим устранить все простые числа из выражения.

misc::maprec(hold(_plus)(i $ i=1..20), isprime= null(), PostMap)

Здесь isprime возвращает TRUE для каждого простого числа между 1 и 20. Каждое простое число между 1 и 20 заменяется пустым указателем () (поскольку null()(p) дает null()), что означает, что вышеупомянутый вызов вычисляет сумму всех непростых чисел между 1 и 20.

Пример 3

Обычно, misc::maprec рекурсивно вызывает также в операторы подвыражений. Это может быть нежелательно во многих случаях:

misc::maprec(a+b, {DOM_IDENT}= (x -> x.1))

Мы только хотели заменить слагаемых, но не оператор. Используя опцию NoOperators помогает:

misc::maprec(a+b, {DOM_IDENT}= (x -> x.1), NoOperators)

Параметры

ex

Любой объект MuPAD

selector

Любой объект MuPAD

funci

Любой объект MuPAD

Опции

PreMap

Для каждого подвыражения s ex селектор применяется к нему после посещения всех его подвыражений; s, возможно, изменился в то время из-за замен в подвыражениях.

PostMap

Для каждого подвыражения s ex селектор применяется к нему прежде, чем посетить его подвыражения. Если s выбран selector, он заменяется funci(s), и к misc::maprec рекурсивно не применяются операнды funci(s); в противном случае misc::maprec рекурсивно применяется к операндам s.

NoOperators

Селектор не применяется к оператору ex.

Unsimplified

Получившиеся выражения далее не упрощены.

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

misc::maprec может возвратить любой объект MuPAD.

Перегруженный

ex

Смотрите также

Функции MuPAD