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
, если соответствие было успешно. Cf. Пример 1. Можно объявить эти свойства для операторов с помощью опций Associative
, Commutative
и Null
(см. ниже). Затем subs(pattern, S)
и expression
больше не должны быть равными в MuPAD®, но они могут быть преобразованы друг в друга приложением правил, подразумеваемых опциями.
И expression
и pattern
могут быть произвольными выражениями MuPAD, т.е. и атомарные выражения, такие как числа, булевы константы, и идентификаторы и составной объектвыражения.
Каждый идентификатор без значения, которое происходит в pattern
, включая 0th операнды, рассматривается как переменная шаблона, в том смысле, что это может быть заменено некоторым выражением в порядке преобразовать pattern
в expression
. Используйте опцию Const
(см. ниже) объявить идентификаторы как незаменимые.
За исключением некоторых автоматических упрощений, выполняемых ядром MuPAD, не учтена дистрибутивность. Cf. Пример 5.
match
оценивает свои аргументы, как обычно. Эта оценка обычно охватывает определенное количество упрощения, которое может изменить синтаксическую структуру и expression
и pattern
неожиданным способом. Cf. Пример 6.
Даже если существует несколько возможных соответствий, match
возвращает самое большее одного из них. Cf. Пример 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
.