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.

Смотрите пример 4 и пример 5.

contains(t, object) возвращает TRUE, если массив, таблица или доменный t имеют запись, соответствующую индексу object. В противном случае это возвращает FALSE. Cf. Пример 6.

Примеры

Пример 1

contains может использоваться, чтобы протестировать, если набор содержит данный элемент:

contains({a, b, c}, a), contains({a, b, c}, 2)

Пример 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)

Пример 3

contains не убывает рекурсивно в операнды его первого аргумента. В следующем примере c не является элементом набора, и поэтому FALSE возвращен:

contains({a, b, c + d}, c)

Если вы хотите протестировать, содержится ли данное выражение где-нибудь в сложном выражении, используйте has:

has({a, b, c + d}, c)

Пример 4

contains применился к list, возвращает положение заданного объекта в списке:

contains([a, b, c], b)

Если список не содержит объект, 0 возвращен:

contains([a, b, c], d)

Пример 5

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)

Пример 6

Для таблиц 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]

Пример 7

contains может использоваться, чтобы протестировать, имеет ли область заданный slot:

T := newDomain("T"):  T::index := value:
contains(T, index), contains(T, value)

Нет никакой записи, соответствующей слоту index в T. Следует иметь в виду, что синтаксис T::index эквивалентен slot(T, "index" ):

contains(T, "index")

Пример 8

Пользователи могут 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)

Параметры

s

Набор

l

Список

t

Массив типа DOM_ARRAY, таблица или область

object

Произвольный объект MuPAD

i

Целое число

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

Для наборов, массивов, таблиц или областей, contains возвращает одно из булевых значений TRUE или FALSE. Для списков возвращаемое значение является неотрицательным целым числом.

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

l, s, t

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

Функции MuPAD