第13章:函数和命令
在这章中,我们将介绍所有内置函数和系统命令。它们的主要区别是,所有的函数有返回值,而系统命令不返回数值。
语法
对于一个参数的函数,我们使用 X 作为参数。对于两个参数的函数,我们使用 X 和 Y 分别作为第一个和第二个参数。如果没有说明,X 或 Y 表示标量,向量,矩阵,字典或表的对象。我们有一些需要一个标量作为参数之一的函数,比如 take, rand, norm。对于这些情况,我们使用小写字母,比如 “a”, “b”. [ ] 里的内容是可选项。
一个参数的函数语法:
(1) <function>(X)
// 标准函数调用
(2) <function> X
// 将函数名放在参数 X 前时,X 两边的括号可以省略。对于嵌套函数调用,这种做法不推荐。
(3) X.<function>()
// 当 X 是一个对象时,X 两边的括号可以省略。对于嵌套函数调用,这种做法更合适。
两个参数的函数语法:
(1) <function>(X, Y)
// 标准函数调用
(2) X <function> Y
// 将函数名放在两个参数之间。对于嵌套函数调用,这种做法不推荐。
(3) X.<function> (Y)
// 当 X 是一个对象时,X 两边的括号可以省略。
可以对常量和变量用面向对象的风格调用一个函数。
为了简明,我们在这章中,对所以一元和两个参数的函数,都只将介绍第一种调用形式,即 <function>(X) 或 <function>(Y)。
函数调用示例
// 3 种调用函数 log 的方式
$ log(10);
2.302585
$ log 10;
2.302585
$ (10).log();
2.302585
// 为了将常数 10 视为一个对象,必须强制给它加一对括号
$ x = 5 3 1 10;
$ log(x);
[1.609438,1.098612,0,2.302585]
$ log x;
[1.609438,1.098612,0,2.302585]
$ x.log();
[1.609438,1.098612,0,2.302585]
// 括号可以省略,因为 x 是一个向量对象
$ (5 3 1 10).log()
[1.609438,1.098612,0,2.302585]
// 为了将向量常数 5 3 1 10 视为一个向量对象,必须强制给它加一对括号
$ sin(add(log(5),7));
0.727959
性能提示
大多数二元运算符/函数不要求两个参数是同样的数据类型。系统会用最佳方式转换类型。但不推荐使用不同的数据类型,因为大量的类型转换会造成性能的损耗。