Checks the arguments of a procedure (R.W. Payne).
Option
ERROR = scalar |
This scalar is given the value 1 if any errors are detected; it should have the value 0 on entry |
|---|
Parameters
STRUCTURE = identifiers |
Lists the structures (arguments) to be checked |
|---|---|
VALUES = variates or texts |
Defines the allowed values for a structure of type variate or text |
DEFAULT = identifiers |
Default to be used if STRUCTURE is set to an unset dummy |
SET = texts |
Indicates whether or not each structure must be set (no, yes); default no |
DECLARED = texts |
Indicates whether or not each structure must have been declared (no, yes); default no |
TYPE = texts |
Text for each structure whose values indicate the types allowed (scalar, factor, text, variate, matrix, diagonalmatrix, symmetricmatrix, table, expression, formula, dummy, pointer, LRV, SSPM, TSM, tree, asave, rsave, tsave, vsave); default * |
PRESENT = texts |
Indicates whether or not each structure must have values (no, yes); default no |
Description
This procedure can be used to check that each argument of a procedure is set, that it is set to a structure of a valid type, that the structure has values, and (for structures of type text or variate) that the values belong to a defined set; unset arguments can be assigned a default. The information about each argument is specified by the parameters of CHECKARGUMENT; if there is anything that is not to be checked, the corresponding parameter should be left unset. The scalar specified by the ERROR option is set to 1 if an error is discovered, and an explanatory message is printed; this scalar should be initialized to zero before calling CHECKARGUMENT.
Option: ERROR.
Parameters: STRUCTURE, VALUES, DEFAULT, SET, DECLARED, TYPE, PRESENT.
Method
CHECKARGUMENT uses GETATTRIBUTE to obtain details of the structures being checked, ASSIGN to set defaults, and if-blocks to make the various tests.
See also
Directives: OPTION, PARAMETER, PROCEDURE.
Commands for: Program control.
Example
CAPTION 'CHECKARGUMENT example'; STYLE=meta
VARIATE V[1...3]; VALUES=!(1.2,2.4),!(4.8),*
TEXT T[1...3]; VALUES=!T(a,c),!T(b),*
MATRIX [ROWS=1; COLUMNS=2; VALUES=1,2] M
POINTER P
TABLE Tb
LRV [ROWS=3; COLUMNS=3] L
DUMMY D[1...12]; VALUE=V[1...3],T[1...3],M,P,Tb,L,X,*
SCALAR E
CALCULATE E = 0
PRINT 'Here there are 12 arguments to check.'
CHECKARGUMENT [ERROR=E] D[1...12]; SET=11('yes'),'no';\
TYPE=3('variate','text'),\
!T(matrix,diagonalmatrix),'pointer','table','LRV',*,*; \
DECLARED=10('yes'),2('no'); \
VALUES=2(!(1.2,2.4,3.6,4.8,6)),*,2(!T(a,b,c,d,e)),7(*); \
PRESENT=(2('yes'),'no')2,'yes',5('no')
PRINT 'No errors so E remains as 0.'
PRINT E
CALCULATE E = 0
PRINT 'Now illustrate various kinds of errors.'
CHECKARGUMENT [ERROR=E] D[12]; SET='yes'
PRINT E
CALCULATE E = 0
CHECKARGUMENT [ERROR=E] D[1]; SET='no'; TYPE=!t(scalar,text); DECLARED='no'
PRINT E
CALCULATE E = 0
CHECKARGUMENT [ERROR=E] D[11]; SET='no'; TYPE='variate'; DECLARED='yes'
PRINT E
CALCULATE E = 0
CHECKARGUMENT [ERROR=E] D[1]; SET='no'; TYPE='variate'; DECLARED='yes';\
VALUES=!(1...6)
PRINT E
CALCULATE E = 0
CHECKARGUMENT [ERROR=E] D[4]; SET='no'; TYPE='text'; DECLARED='yes';\
VALUES=!T(A,B,C,D,E)
PRINT E
CALCULATE E = 0
CHECKARGUMENT [ERROR=E] D[6]; SET='no'; TYPE='text'; DECLARED='yes';\
VALUES=!T(A,B,C,D,E); PRESENT='yes'
PRINT E