类似于q这样的向量语言。一般我们不鼓励使用if,else等变化执行顺序的编码风格,因为这样的效率不高。但总归用户多少会遇到这样的需求。所以q也多少提供了这些方法。
$[expr_eval;expr_true;expr_false]
如果expr_eval为真,那么执行并返回expr_true,否则返回expr_false。事实上,expr_true和expr_false都可以是一个语句组,被包含在[step1;step2]中。
另外一个加强版是$[expr_eval;expr_true1;expr_eval;expr_true2;expr_false]。类似于c语言中的if ... else if ... else if ... else...,实际上是模拟了switch case的作用。
?[expr_b;expr_true;expr_false]
expr_b是一个boolean列表。对于每个元素都将进行衡量,如果为真,那么处理expr_true,否则expr_false。
循环
if[cond; expr1;...; exprN]
cond为真,那么执行expr1到N
do[count; expr1;...; exprN]
先计算count的大小,然后把expr1到exprN 执行count次。
while[cond; expression1;...; expressionN]
只要cond为非0,那么后面的语句一直被执行。
return和退出
在循环和判断中,类似于c语言中的break在q中也是存在的。不过存在的形式可能略有不同。
:a+b 将a+b付给nobody,其实就是return,故此,在其之后的语句都将不执行。
'`abc 在值的左侧加入单引号可以提前结束循环等,其之后的语句也不会再被执行。
阅读(911) | 评论(0) | 转发(0) |