match
Сопоставление с образцом
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
match(expression
, pattern
, options
)
match(expression, pattern)
проверки, ли синтаксическая структура expression
соответствия pattern
. Если так, вызов возвращает набор заменяющих уравнений, преобразовывающих pattern
в expression
.
match
вычисляет набор заменяющих уравнений S
для идентификаторов, происходящих в pattern
, таким образом, что subs(pattern, S)
и expression
совпадите до ассоциативности, коммутативности и нейтральных элементов.
Без дополнительных опций выполняется чисто синтаксическое соответствие; ассоциативность, коммутативность или нейтральные элементы учтены только для встроенных операторов +
и *
, and
и or
, и union
и intersect
. В этом случае, subs(pattern, S) = expression
содержит для набора S
из заменяющих уравнений, возвращенных match
если соответствие было успешно. См. Пример 1. Можно объявить эти свойства для операторов с помощью опций Associative
, Commutative
, и Null
(см. ниже). Затем subs(pattern, S)
и expression
потребность больше не быть равными в MuPAD®, но они могут быть преобразованы друг в друга приложением правил, подразумеваемых опциями.
Оба expression
и pattern
могут быть произвольные выражения MuPAD, т.е. и атомарные выражения, такие как числа, булевы константы, и идентификаторы и составной объектвыражения.
Каждый идентификатор без значения, которое происходит в pattern
, включая 0th операнды, рассматривается как переменная шаблона, в том смысле, что она может быть заменена некоторым выражением для того, чтобы преобразовать pattern
в expression
. Используйте опцию Const
(см. ниже) объявить идентификаторы как незаменимые.
За исключением некоторых автоматических упрощений, выполняемых ядром MuPAD, не учтена дистрибутивность. См. Пример 5.
match
оценивает его аргументы, как обычно. Эта оценка обычно охватывает определенное количество упрощения, которое может изменить синтаксическую структуру обоих expression
и pattern
неожиданным способом. См. Пример 6.
Даже если существует несколько возможных соответствий, match
возвращает самое большее одного из них. См. Пример 7.
Если структура expression
не совпадает с pattern
, match
возвращает FAIL
.
Если expression
и pattern
равны, пустое множество возвращено.
В противном случае, если соответствие найдено и expression
и pattern
отличаются, затем набор S
из замены уравнения возвращен. Для каждой переменной x
шаблона появление в
pattern
это не объявляется постоянное с помощью опции Const
S
содержит точно одно заменяющее уравнение формы x = y
, и y
выражением нужно заменить x
для того, чтобы преобразовать pattern
в expression
.
Все идентификаторы следующего шаблона являются переменными шаблона:
match(f(a, b), f(X, Y))
Функциональный f
объявляется незаменимым:
match(f(a, b), f(X, Y), Const = {f})
Следующий вызов содержит условие для переменной X
шаблона:
match(f(a, b), f(X, Y), Const = {f}, Cond = {X -> not has(X, a)})
Если функциональный f
объявляется коммутативным, выражение совпадает с данным шаблоном — в отличие от предыдущего примера:
match(f(a, b), f(X, Y), Const = {f}, Commutative = {f}, Cond = {X -> not has(X, a)})
Следующее выражение не может быть соответствующим, поскольку количество аргументов выражения и шаблона отличается:
match(f(a, b, c), f(X, Y), Const = {f})
Мы объявляем функциональный f
ассоциативный с опцией Associative
. В этом случае шаблон совпадает с данным выражением:
match(f(a, b, c), f(X, Y), Const = {f}, Associative = {f})
Если, однако, вызов функции в шаблоне имеет больше аргументов, чем соответствующий вызов функции в выражении, никакое соответствие не найдено:
match(f(a, b), f(X, Y, Z), Const = {f}, Associative = {f})
Если нейтральный элемент относительно оператора f
известен, дополнительные соответствия возможны путем заменения им некоторые переменные шаблона:
match(f(a, b), f(X, Y, Z), Const = {f}, Associative = {f}, Null = {f = 0})
Дистрибутивность не учтена в целом:
match(a*x + a*y, a*(X + Y), Const = {a})
Следующий вызов находит соответствие, но не ожидаемое:
match(a*(x + y), X + Y)
Следующие объявления и условия не приводят к ожидаемому результату, также:
match(a*(x + y), a*X + a*Y, Const = {a}, Cond = {X -> X <> 0, Y -> Y <> 0})
Автоматические упрощения могут “уничтожить” структуру данного выражения или шаблона:
match(sin(-2), sin(X))
Результатом является FAIL
, потому что первый аргумент sin(-2)
оценен и переписан к -sin(2)
:
sin(-2)
Можно обойти эту проблему при помощи hold
:
match(hold(sin(-2)), sin(X))
match
возвращает только одно возможное соответствие:
match(a + b + c + 1, X + Y)
Чтобы получить другие решения, используйте условия исключить решения, которые вы уже имеете:
match(a + b + c + 1, X + Y, Cond = {X <> a})
match(a + b + c + 1, X + Y, Cond = {X <> a and Y <> a})
match(a + b + c + 1, X + Y, Cond = {X <> a and X <> b and Y <> a})
Каждая переменная шаблона может иметь самое большее одну процедуру условия. Простые условия могут быть даны анонимными процедурами (->
):
match(a + b, X + Y, Cond = {X -> X <> a, Y -> Y <> b})
Несколько условий на переменной шаблона могут быть объединены в одной процедуре:
Xcond := proc(X) begin if domtype(X) = DOM_IDENT then X <> a and X <> b else X <> 0 end_if end_proc:
match(sin(a*b), sin(X*Y), Cond = {Xcond})
match(sin(a*c), sin(X*Y), Cond = {Xcond})
delete Xcond:
|
Выражение MuPAD |
|
Шаблон: выражение MuPAD |
|
Дополнительные аргументы, как описано ниже |
|
Опция, заданная как Это принято это идентификаторы Никакие специальные правила для ассоциативных операторов меньше чем с двумя аргументами не применяются. В частности, |
|
Опция, заданная как Это принято что идентификаторы |
|
Опция, заданная как Только соответствия, удовлетворяющие условиям, заданным процедурами Анонимные процедуры создаются через Если возможное соответствие найдено, данное набором заменяющих уравнений Например, если Может быть самое большее одна процедура условия для каждой переменной шаблона. При необходимости используйте логические операторы |
|
Опция, заданная как Идентификаторы |
|
Опция, заданная как Это принято тот Это объявление влияет только на операторы, которые объявляются ассоциативные с помощью опции |
Набор заменяющих уравнений или FAIL
.