has
Проверяйте, происходит ли объект в другом объекте
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
has(object1
,object2
) has(object1
,l
)
Проверки has(object1, object2)
, происходит ли object2
синтаксически в object1
.
has
является быстрым тестом для существования подобъектов или подвыражений. Это работает синтаксически, т.е. математически эквивалентные объекты считаются равными, только если они синтаксически идентичны. Смотрите Пример 2.
Если object1
является выражением, то has(object1, object2)
тестирует, содержит ли object1
object2
как подвыражение. Только полные подвыражения и объекты, происходящие в 0th операнде подвыражения, найдены (см. Пример 1).
Если object1
является контейнером, то has
проверяет, происходит ли object2
в записи object1
. Смотрите Пример 5.
В этом контексте интервал с плавающей точкой рассматривается контейнером для (бесконечное число) комплексные числа и проверки has
, является ли данный номер в интервале. Смотрите Пример 4.
Если второй аргумент является списком или набором l
, то has
возвращает TRUE
, если по крайней мере один из элементов в l
происходит в object1
(см. Пример 3). В частности, если l
является пустым списком или пустым множеством, то возвращаемым значением является FALSE
.
Если object1
является элементом области со слотом "has"
, то стандартная программа слота вызвана теми же аргументами, и ее результат возвращен. Если область не будет иметь такого слота, то FALSE
будет возвращен. Смотрите Пример 7.
Если has
вызван списком или установлен в качестве второго аргумента, то слот "has"
области object1
называется для каждого объекта списка или набора. Когда первый объект найден, что это происходит в object1
, оценка отключена, и TRUE
возвращен. Если ни один из объектов не произойдет в object1
, FALSE
будет возвращен.
Данное выражение имеет x
как операнд:
has(x + y + z, x)
Обратите внимание на то, что x + y
не является полным подвыражением. Только x
, y
, z
и x + y + z
являются полными подвыражениями:
has(x + y + z, x + y)
Однако has
также находит объекты в 0th операнде подвыражения:
has(x + sin(x), sin)
Каждый объект происходит сам по себе:
has(x, x)
has
работает чисто синтаксическим способом. Несмотря на то, что эти два выражения, y*(x + 1)
и y*x + y
математически эквивалентны, они отличаются синтаксически:
has(sin(y*(x + 1)), y*x + y), has(sin(y*(x + 1)), y*(x + 1))
Комплексные числа не рассматриваются как атомарные объекты:
has(2 + 5*I, 2), has(2 + 5*I, 5), has(2 + 5*I, I)
Напротив, рациональные числа считаются атомарными:
has(2/3*x, 2), has(2/3*x, 3), has(2/3*x, 2/3)
Если второй аргумент является списком или набором, проверки has
, происходит ли одна из записей в первом аргументе:
has((x + y)*z, [x, t])
Операнды 0th подвыражений проверяются также:
has((a + b)*c, {_plus, _mult})
На интервалах с плавающей точкой has
выполняет проверку включения, не только тестируя границы:
has(1...3, 1)
has(1...3, 2.7182), has(1...3, exp(1)), has(1...3, PI)
has(1...(3+I), [2, ln(3)])
has
работает на списки, наборы, таблицы, массивы и hfarrays:
has([sin(f(a) + 2), cos(x), 3], {f, g})
has({a, b, c, d, e}, {a, z})
has(array(1..2, 1..2, [[1, 2], [3, 4]]), 2)
Для массива A
команда has(A,NIL)
проверяет, имеет ли массив какие-либо неинициализированные записи:
has(array(1..2, 1 = x), NIL), has(array(1..2, [2, 3]), NIL)
Для таблиц has
проверяет индексы, записи, а также внутренние операнды таблицы, данной уравнениями формы index=entry
:
T := table(a = 1, b = 2, c = 3): has(T, a), has(T, 2), has(T, b = 2)
has
работает синтаксически. Несмотря на то, что переменная x
не происходит математически в постоянном полиномиальном p
в следующем примере, идентификатор, x
происходит синтаксически в p
, а именно, во втором операнде:
delete x: p := poly(1, [x]): has(p, x)
Второй аргумент может быть произвольным объектом MuPAD®, даже от пользовательской области:
T := newDomain("T"): e := new(T, 1, 2); f := [e, 3];
has(f, e), has(f, new(T, 1))
Если первый аргумент has
принадлежит области без слота "has"
, то has
всегда возвращает FALSE
:
has(e, 1)
Пользователи могут overloadhas
для своих собственных областей. Для рисунка мы предоставляем доменный T
слот "has"
, который помещает внутренние операнды его первого аргумента в списке и вызывает has
для списка:
T::has := (object1, object2) -> has([extop(object1)], object2):
Если мы теперь вызываем has
с объектом e
доменного типа T
, стандартная программа слота, T::has
вызывается:
has(e, 1), has(e, 3)
Стандартная программа слота также называется, если объект доменного типа T
происходит синтаксически в первом аргументе:
has(f, 1), has(f, 3)
object1