andmap - Maple Programming Help

Online Help

All Products    Maple    MapleSim


Home : Support : Online Help : Programming : Operations : Sets and lists : andmap

andmap

determine whether a predicate is true of all operands of an expression

ormap

determine whether a predicate is true of some operands of an expression

 

Calling Sequence

Parameters

Description

Thread Safety

Examples

Compatibility

Calling Sequence

andmap(p, expr, ...)

ormap(p, expr, ...)

Parameters

p

-

predicate returning either true or false

expr

-

expression

...

-

(optional) other arguments to pass to p

Description

• 

The procedures andmap and ormap determine whether a predicate p returns true, false, or FAIL for all or some operands of an expression expr.

• 

If expr is atomic, both andmap(p, expr, ...) and ormap(p, expr, ...) are equivalent to p(expr, ... ).

• 

In general, andmap(p, expr, ...) returns true if p(opnd, ...) is true for all operands opnd of expr, returns false if any call to p returns false, and returns FAIL when calls to p lead to at least one FAIL result and any number of other true and FAIL results.

• 

Similarly, ormap(p, expr, ...) returns false if p(opnd, ...) is false for all operands opnd of expr, true when any call to p returns true, and FAIL when calls to p lead to at least one FAIL result and any number of other false and FAIL results.

• 

Both andmap and ormap have short-circuit ("McCarthy") semantics, which means that an answer is returned as soon as it can be determined. The predicate only evaluates at the operands of the expression expr until the result can be determined. The order in which the operands are examined is not specified. You should not rely on side effects of the predicate p.

• 

For a table or array, p is applied to each entry of the table or array.

• 

Since strings are atomic expressions in Maple, you cannot map a procedure over a string by using andmap and ormap. However, the StringTools package contains the exports AndMap and OrMap that provide this functionality.

Thread Safety

• 

The andmap and ormap commands are thread safe as of Maple 15, provided that evaluating the expression p is thread safe.

• 

For more information on thread safety, see index/threadsafe.

Examples

andmaptype,1,2,3,4,5,'integer'

true

(1)

ormaptype,1,2,3,4,5,'integer'

true

(2)

andmaptype,1,2,3,4,5,'even'

false

(3)

ormaptype,1,2,3,4,5,'even'

true

(4)

andmapisprime,2,3,5,7

true

(5)

andmapisprime,2,3,5,8

false

(6)

ormapisprime,2,3,5,8

true

(7)

ttablea=1,b=2,c=3:

andmaptype,evalt,1,'integer'

true

(8)

andmaptype,evalt,1,'even'

false

(9)

ormaptype,evalt,1,'even'

true

(10)

eexpand∫randpolyxⅆx

e7x5ⅆx+22x4ⅆx55x3ⅆx94x2ⅆx+87xⅆx561ⅆx

(11)

andmaphastype,e,'specfuncanything,Int'

true

(12)

This examples illustrates a technique for quickly destructuring a record.

RecordSlots := proc( r::record )
      if not type( [ args[ 2 .. nargs ] ], 'list( symbol )' ) then
              error "arguments after the first must be of type `symbol'"
      end if;
      andmap( e -> member( cat( e ), r, e ), [ args[ 2 .. nargs ] ] )
end proc:

rRecord'a'=2,'b'=3,'c'=Array1..5

rRecorda=2,b=3,c=00000

(13)

RecordSlotsr,'a','b','c'

true

(14)

a,b,c

2,3,00000

(15)

andmapa&rarr;`if`a<0&comma;FAIL&comma;amod7&equals;0&comma;7&comma;14

true

(16)

andmapa&rarr;`if`a<0&comma;FAIL&comma;amod7&equals;0&comma;7&comma;14&comma;7

FAIL

(17)

andmapa&rarr;`if`a<0&comma;FAIL&comma;amod7&equals;0&comma;7&comma;14&comma;7&comma;3

false

(18)

ormapa&rarr;`if`a<0&comma;FAIL&comma;amod7&equals;0&comma;7&comma;14&comma;7

true

(19)

ormapa&rarr;`if`a<0&comma;FAIL&comma;amod7&equals;0&comma;1&comma;3

false

(20)

ormapa&rarr;`if`a<0&comma;FAIL&comma;amod7&equals;0&comma;1&comma;3&comma;5

FAIL

(21)

Compatibility

• 

The andmap and ormap commands were updated in Maple 2017.

See Also

curry

map

op

rcurry

select

spec_eval_rules

StringTools

StringTools[AndMap]

StringTools[OrMap]

type/atomic