[Magma]函数的定义
Magma 中函数的定义有两种句法:
-
f := function(x1,...,xn: parameters) statements end function;
-
function f(x1,...,xn: parameters) statements end function;
函数体中至少有一句应是 return 语句, 可以返回多个值, 形如
return expression,...,expression;
当在 if ... then ... else 结构中, 如果要返回无定义的值, 则可使用下划线 _ , 这可以使得函数体的所有分支的返回值数目都是一样的.
参数的给定
参数的给定必须是逗号分隔的列表形式, 形如:
identifier1 := value, identifier2 := value, identifier3 := value
两者的区别
这两种定义方式的唯一区别在于递归调用时, 第一种形式的函数 f 不能在其定义体中调用 f 自己, 必须使用 $$ 来指代 f 自身. 而第二种形式的函数可以在定义体中调用函数自身.
例子: 生成 Fibonacci 数列
可变参数的函数定义方式
-
f := function(x1,...,xn,... : parameters) statements end function;
-
function f(x1,...,xn,... : parameters) statements end function;
这种函数在调用时可以传递多于 n 个参数. 形如: $f(y_1,...,y_m)$, $m\geqslant n$.
- 对于 $i < n $, 实参 $y_i$ 被绑定到虚参 $x_i$ 上;
- 对于 $i\geqslant n$, $y_i$ 被绑定到 $x_n$ 作为一个列表 $[*y_n,\ldots,y_m*]$.
简写方式
当函数体非常简单, 可以用一个表达式来定义时可以使用下面的简写方式来定义.
-
f := func < x1,...,xn : parameters | expression >;
-
f := func < x1,...,xn, ... : parameters | expression >;