全部博文(54)
分类: 嵌入式
2010-12-22 22:45:57
q和其他语言一样,内置了许多常见的操作符和函数。
操作符和函数
有关内置函数的介绍,我们放在后面blog介绍。这次主要介绍各类常见的操作符,以及这些操作符在不同数据类型上的效果。
操作符实质上和函数是一个概念,只不过操作符通常写在表达式中间而函数通常卸载前面。大部分情况下,系统内置的操作符都能够被写成函数的形式。例如
3+2 =》 5
也可以写成
+[3;2] => 5. 虽然看着比较怪,但我们必须认识到这个存在的意义。
另外对语言学习不深的人可能还有一个误解。所有的操作符都是符号,而函数才是字母组成。完全不然。例如xexp,neg等都是操作符。
操作符优先级
在优先级这个概念上,q语言和其他语言相去甚远。在q中不存在优先级的概念。任何一个表达式都是自右往左进行解析。任何需要改变这一执行效果的方法只能依赖括号。括号内的表达式总是被先执行,所以要合理使用这点。
之所以没有优先级,有这么几个原因:
减少程序员对优先级的判断
减少误差(语言解析的误差)
~ 比较符
该操作的两端接受两个实体,返回一个bool值。主要是比较两个实体的数据类型和值大小。两者都满足后,返回1b,否则0b。
关系运算
关系运算往往应用在Atom上。一般情况下也返回bool值。
= 和<>
相等运算,是测量两个值的大小,允许值不同类,但要求类间可转化。因此symbol不可和char比较。
not 取反
该运算总是将值与0进行比较。
> < >= <= 比较
基本数学运算
+ - * %
唯一要注意的是,q中除法不再使用/,因为/已经被用作注释。另外数学运算也要求运算的两侧都是Atom。
最大值|和最小值&
数学公式sqrt, exp, log, xexp, xlog
这些数学公式的输入可以是整数等各种数字类型,但返回值永远都是float。
还有这些数学公式mod, signum, reciprocal, floor, ceiling 和abs
其中reciprocal 返回参数的倒数。
signum返回数字的符号0或-1或1.
mod可以处理浮点数,5.2 mod 1.1 = 0.8