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 будет возвращен.

Примеры

Пример 1

Данное выражение имеет 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)

Пример 2

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)

Пример 3

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

has((x + y)*z, [x, t])

Операнды 0th подвыражений проверяются также:

has((a + b)*c, {_plus, _mult})

Пример 4

На интервалах с плавающей точкой 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)])

Пример 5

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)

Пример 6

has работает синтаксически. Несмотря на то, что переменная x не происходит математически в постоянном полиномиальном p в следующем примере, идентификатор, x происходит синтаксически в p, а именно, во втором операнде:

delete x: p := poly(1, [x]):
has(p, x)

Пример 7

Второй аргумент может быть произвольным объектом 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, object2

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

l

Список или набор

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

Или TRUE или FALSE

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

object1

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

Функции MuPAD