The following program shows example functions with argument lists similar to those described above.
#!/usr/cogent/bin/gamma
function variable_args (x, y...)
{
princ("---- Output from variable_args(x, y...) ---- \n");
princ("The first arg: ", x, "\n");
with a in y do
{
princ("One of the variable args: ", a, "\n");
}
princ("\n");
}
function optional_args (x, y?, z=5)
{
princ("---- Output from optional_args(x, y?, z=5) ---- \n");
if (undefined_p(y))
y = "This value has not been defined.";
princ("The first arg: ", x, "\n");
princ("The second arg: ", y, "\n");
princ("The third arg: ", z, "\n");
princ("\n");
}
function no_eval(x, !y)
{
princ("---- Output from no_eval(x, !y) ---- \n");
princ("This argument was evaluated: ", x, "\n");
princ("This argument was not evaluated: ", y, "\n");
princ("\n");
}
function many_args (fixed_arg, !y?... = nil)
{
princ("-- Output from many_args(fixed_arg, !y?... = nil) ---- \n");
princ("fixed_arg: ", fixed_arg, "\n");
princ("y: ", y, "\n");
princ("The first y arg: ", car(y), "\n");
with a in cdr(y) do
{
princ("The next y arg: ", a, "\n");
}
princ("\n");
}
variable_args("hello", 9, "world", 4 + 7, #x);
optional_args(1);
optional_args(1, 2);
optional_args(1, 2, 3);
no_eval(2+2, 3+3);
many_args("Fixed", "hello", 9, "world", 4 + 7, #x);
The output of this program is as follows:
---- Output from variable_args(x, y...) ---- The first arg: hello One of the variable args: 9 One of the variable args: world One of the variable args: 11 One of the variable args: x ---- Output from optional_args(x, y?, z=5) ---- The first arg: 1 The second arg: This value has not been defined. The third arg: 5 ---- Output from optional_args(x, y?, z=5) ---- The first arg: 1 The second arg: 2 The third arg: 5 ---- Output from optional_args(x, y?, z=5) ---- The first arg: 1 The second arg: 2 The third arg: 3 ---- Output from no_eval(x, !y) ---- This argument was evaluated: 4 This argument was not evaluated: (+ 3 3) ---- Output from many_args(!y?... = nil) ---- One of the args: hello One of the args: 9 One of the args: world One of the args: (+ 4 7) One of the args: 'x