contains
Протестируйте, если запись существует в контейнере
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
contains(s
,object
) contains(l
,object
, <i
>) contains(t
,object
)
contains(s, object)
тестирует, если object
является элементом набора s
.
contains(l, object)
возвращает индекс object
в списке l
.
contains(t, object)
тестирует, если массив, таблица или доменный t
имеют запись, соответствующую индексу object
.
contains
является быстрым тестом членства для MuPAD® основные контейнерные типы данных. Для списков и наборов, contains
ищет элементы данный объект. Однако для массивов, таблиц и областей, contains
ищет индексы.
contains
работает синтаксически, т.е. математически эквивалентные объекты считаются равными, только если они синтаксически идентичны. contains
не представляет elementhood в математическом смысле. Смотрите Пример 2.
contains
не убывает рекурсивно в подвыражения; используйте has
, чтобы достигнуть этого. Смотрите Пример 3.
contains(s, object)
возвращает TRUE
, если object
является элементом набора s
. В противном случае это возвращает FALSE
.
contains(l, object)
возвращает положение object
в списке l
как положительное целое число, если object
является записью l
. В противном случае возвращаемым значением является 0
. Если больше чем одна запись l
равна object
, то индекс первого вхождения возвращен.
Путем передачи третьего аргумента i
contains
можно задать положение в списке, где поиск должен запуститься. Затем записи с индексом меньше, чем i
не учтены. Если i
вне области значений, то возвращаемым значением является 0
.
contains(t, object)
возвращает TRUE
, если массив, таблица или доменный t
имеют запись, соответствующую индексу object
. В противном случае это возвращает FALSE
. Cf. Пример 6.
contains
может использоваться, чтобы протестировать, если набор содержит данный элемент:
contains({a, b, c}, a), contains({a, b, c}, 2)
contains
работает синтаксически, т.е. математически эквивалентные объекты считаются равными, только если они синтаксически идентичны. В этом примере contains
возвращает FALSE
, поскольку y*(x + 1)
и y*x + y
являются различными представлениями того же математического выражения:
contains({y*(x + 1)}, y*x + y)
Elementhood в математическом смысле представлен оператором in
:
simplify(y*x + y in {y*(x+1)}, condition)
contains
не убывает рекурсивно в операнды его первого аргумента. В следующем примере c
не является элементом набора, и поэтому FALSE
возвращен:
contains({a, b, c + d}, c)
Если вы хотите протестировать, содержится ли данное выражение где-нибудь в сложном выражении, используйте has
:
has({a, b, c + d}, c)
contains
применился к list
, возвращает положение заданного объекта в списке:
contains([a, b, c], b)
Если список не содержит объект, 0
возвращен:
contains([a, b, c], d)
contains
возвращает положение первого вхождения данного объекта в списке, если это происходит несколько раз:
l := [a, b, a, b]: contains(l, b)
Стартовая позиция для поиска может быть дана как дополнительный третий аргумент:
contains(l, b, 1), contains(l, b, 2), contains(l, b, 3), contains(l, b, 4)
Если третий аргумент вне области значений, то возвращаемым значением является 0
:
contains(l, b, -1), contains(l, b, 0), contains(l, b, 5)
Для таблиц contains
возвращает TRUE
, если второй аргумент является допустимым индексом в таблице. Записи, сохраненные в таблице, не рассматриваются:
t := table(13 = value): contains(t, 13), contains(t, value)
Точно так же contains
тестирует, если array
имеет значение для данного индекса. Массив a
имеет значение, соответствующее индексу (1, 1)
, но ни один для индекса (1, 2)
:
a := array(1..3, 1..2, (1, 1) = x, (2, 1) = PI): contains(a, (1, 1)), contains(a, (1, 2))
contains
не предназначается для тестирования, если массив содержит данное значение:
contains(a, PI)
Error: Index dimension does not match. [array]
Даже если размерности соответствуют, индекс не должен быть вне области значений:
contains(a, (4, 4))
Error: Invalid argument. [array]
contains
может использоваться, чтобы протестировать, имеет ли область заданный slot
:
T := newDomain("T"): T::index := value: contains(T, index), contains(T, value)
Нет никакой записи, соответствующей слоту index
в T
. Следует иметь в виду, что синтаксис T::index
эквивалентен slot(T, "index" )
:
contains(T, "index")
Пользователи могут overloadcontains
для своих собственных областей. Для рисунка мы создаем новый доменный T
и предоставляем его слот "contains"
, который тесты является набором записей элемента, содержит данное значение idx
:
T := newDomain("T"): T::contains := (e, idx) -> contains({extop(e)}, idx):
Если мы теперь вызываем contains
с объектом доменного типа T
, стандартная программа слота, T::contains
вызывается:
e := new(T, 1, 2): contains(e, 2), contains(e, 3)
| |
| |
| |
|
Произвольный объект MuPAD |
|
Для наборов, массивов, таблиц или областей, contains
возвращает одно из булевых значений TRUE
или FALSE
. Для списков возвращаемое значение является неотрицательным целым числом.
l
, s
, t