Select operands
This functionality does not run in MATLAB.
select(object
, f
, <p1, p2, …
>)
select(object, f)
returns a copy of the object
with all operands removed that do not satisfy a criterion defined
by the procedure f
.
select
is a fast and handy function for picking
out elements of lists, sets, tables etc. that satisfy a criterion
set by the procedure f
.
The function f
must return a value that can
be evaluated to one of the Boolean values TRUE
, FALSE
, or UNKNOWN
.
It may either return one of these values directly, or it may return
an equation or an inequality that can be simplified to one of these
values by the function bool
.
Internally, the function f
is applied to
all operands x
of
the input object via the call f(x, p1, p2, ...)
.
If the result is not TRUE
, this operand is removed.
The original object is not modified in this process.
The output object is of the same type as the input object, i.e., a list yields a list, a set yields a set etc.
An input object that is an expression sequence is not flattened. Cf. Example 2.
Also "atomic" objects such as numbers or identifiers
can be passed to select
as first argument. Such
objects are handled like sequences with a single operand.
select
handles lists and sets. In the first
example, we select all true statements from a list of logical statements.
The result is again a list:
select([1 = 1, 1 = 2, 2 = 1, 2 = 2], bool)
In the following example, we extract the subset of all elements
that are recognized as zero by iszero
:
select({0, 1, x, 0.0, 4*x}, iszero)
select
also works on tables:
T:= table(1 = "y", 2 = "n", 3 = "n", 4 = "y", 5 = "y"): select(T, has, "y")
The following expression is a sum, i.e., an expression of type "_plus"
.
We extract the sum of all terms that do not contain x
:
select(x^5 + 2*x + y  4, _not@has, x)
We extract all factors containing x
from
the following product. The result is a product with exactly one factor,
and therefore, is not of the syntactical type "_mult"
:
select(11*x^2*y*(1  y), has, x)
delete T:
select
works for expression
sequences:
select((1, 4, 3, 0, 5, 2), testtype, Type::Negative)
The $ command generates such expression sequences:
select(i $ i = 1..20, isprime)
Atomic objects are treated as expression sequences of length one:
select(5, isprime)
The following result is the void object null()
of
type DOM_NULL
:
domtype(select(6, isprime))
It is possible to pass an "anonymous procedure"
to select
. This allows to perform more complex
actions with one call. In the following example, the command anames(All)
returns
a set of all identifiers that have a value in the current MuPAD^{®} session.
The select
statement extracts all identifiers beginning
with the letter "h"
:
select(anames(All), x > expr2text(x)[1] = "h")

A list, a set,
a table, an expression
sequence, or an expression of type 

A procedure returning a Boolean value 

Any MuPAD objects accepted by 
Object of the same type as the input object.
object