up previous next
define a function
Define F(X_1, .., X_n) C EndDefine
Define F(X_1, .., opt X_n) C EndDefine
Define F(...) C EndDefine
return FUNCTION |
1. INTRODUCTION. This command adds the user-defined function F to the
library. The function F can be called in the following way:
F(E_1,...,E_n)
where the
E_i
's are expressions.
The result of the evaluation of each expression
E_i
is
assigned to the respective formal parameter
X_i
, and
the command sequence
C
is executed.
If, during the execution of
C
, a statement
Return E
is
executed, then the result of the evaluation of
E
is the return-value
of the function
F
.
If no
Return
command is executed, or
Return
is
executed without argument, then the return-value is
Null
.
/**/ Define square(X)
/**/ Return X^2;
/**/ EndDefine;
/**/ square(5);
25
|
or a variable number of arguments
/**/ define strange(...) --> all args are in the list ARGV
/**/ if len(ARGV) = 0 then return 1234; endif;
/**/ if len(ARGV) > 4 then return last(ARGV)^2; endif;
/**/ error("Wrong number for arguments for \"strange\"!");
/**/ enddefine;
/**/ strange();
1234
/**/ strange(1, 4, "a", 5, 10);
100
/**/ -- strange(1,2); --> ERROR
|
2. SCOPE. Every variable defined or modified by the command sequence
C
is considered local to the function unless the variable is global or
relative to a
ref
parameter.
See
TopLevel
for the use of global variables.
See
ref
to learn about calling a function
by reference,
i.e. so that the function can change the value of an existing variable.
/**/ Define Example_1(L)
/**/ L := L + 5;
/**/ Return L;
/**/ EndDefine;
/**/ L := 0;
/**/ Example_1(L);
5
/**/ L; -- L is unchanged despite the function call.
0
|
3. VARIABLE NUMBER OF PARAMETERS. It is also possible to have
some optional arguments or a variable number of arguments:
-- OPTIONAL ARGUMENTS must be in the last positions
/**/ define deg0(f, opt x)
/**/ if f=0 then return 0; endif;
/**/ if IsDefined(x) then return deg(f,x); endif;
/**/ return deg(f);
/**/ enddefine;
/**/ use P ::= QQ[x,y,z];
/**/ deg0(zero(P));
0
/**/ deg0(x^2+y);
2
/**/ deg0(x^2+y, y);
1
-- VARIABLE number of ARGUMENTS
/**/ Define MySum(...) --> arguments are in the LIST "ARGV"
/**/ If len(ARGV) = 0 Then Return 12345;
/**/ Else
/**/ ans := 0;
/**/ Foreach N In ARGV Do ans := ans+N; EndForeach;
/**/ EndIf;
/**/ Return ans;
/**/ EndDefine;
/**/ MySum(1,2,3,4,5);
15
/**/ MySum();
12345
|
The old statement,
Help S;
is OBSOLETE!