procedure - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim


type/procedure

check for a procedure

 

Calling Sequence

Parameters

Description

Subtypes

Supertypes

Examples

Calling Sequence

type(expr, 'procedure')

type(expr, 'procedure[rtype](type1, type2, ...)')

Parameters

expr

-

any expression

rtype, type1, type2, ...

-

any Maple types

Description

• 

The first form of this command performs a surface type test for expressions of type procedure. This includes both builtin and library- or user-defined procedures. See procedure for more information about the definition and use of procedures.

• 

Note the distinction between an expression of type procedure and one of type function, which might be better called a function call. In Maple it is the procedure type, rather than function that corresponds to what one thinks of as a mathematical function.

• 

The second form of test is a structured type test for procedures whose arguments and (optionally) return types are declared to have a given type. (The term declared is a misnomer, since one of Maple's strengths is its complete lack of type declarations. However, for the purpose of dynamic type checking, it is useful to think of argument type specifier and return type assertion annotations in this way.)

• 

A declared return type may be tested for by enclosing the type specifier rtype (which may be an arbitrary Maple type) for the return type in brackets immediately after the symbol procedure. Procedures that do not have a return type assertion are considered to have a declared return type of anything.

• 

Explicitly declared parameter types may be tested for by enclosing the types in parentheses. The names of parameters are not considered, only their declared types. A procedure p has type procedure(T1, T2, ..., Tn), where T1, T2, ..., Tn are types, if it has exactly n declared parameters and the i-th parameter is declared to have type Ti, for each i. In other words, p must have been defined by a procedure definition of the form p := proc(t1::T1, t2::T2, ..., tn::Tn). A parameter whose type is not specified is considered to have been declared to have type anything.

• 

Note that argument types and return types are both optional and may be tested independently of one another.

• 

Currently, argument and return types must match exactly the types found in the procedure data structure. Subtype relationships are not computed.

• 

Note that no builtin procedure has either return type assertions or declared parameter types.

Subtypes

• 

type/builtin

Supertypes

• 

type/appliable, type/atomic, type/last_name_eval

Examples

The first few examples try to illustrate the sometimes confusing relationship between procedures and functions.

typesin,procedure

true

(1)

typesin,function

false

(2)

typesinx,procedure

false

(3)

typesinx,function

true

(4)

typeF,procedure

false

(5)

typeFx,procedure

false

(6)

typeFx,function

true

(7)

Here are some examples of various kinds of procedures, and some non-examples.

f := proc(x) x^2 end proc;

fprocxx^2end proc

(8)

typef,procedure

true

(9)

gtsintcost:

typeg,procedure

true

(10)

typenops,procedure

true

(11)

typex2,procedure

false

(12)

typemoduleend module,'procedure'

false

(13)

These examples illustrate the use of the structured procedure type.

typesin,procedurealgebraic

true

(14)

typefopen,procedurestring,symbol,symbol

true

(15)

typefopen,procedurestring,symbol

false

(16)

typefopen,procedurestring,symbol

false

(17)

p := proc( a::algebraic, n::integer)::algebraic; a^n end proc:

typep,procedurealgebraic

true

(18)

typep,procedurealgebraicalgebraic,integer

true

(19)

p := proc( a::algebraic, n::integer) a^n end proc: # no return type assertion

typep,procedurealgebraic,integer

true

(20)

typep,procedureanythingalgebraic,integer

true

(21)

typep,procedurealgebraicalgebraic,integer

false

(22)

See Also

procedure

type

type/anything

type/appliable

type/builtin

type/function

type/last_name_eval

type/operator