Chinaunix首页 | 论坛 | 博客
  • 博客访问: 262805
  • 博文数量: 54
  • 博客积分: 1761
  • 博客等级: 上尉
  • 技术积分: 585
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-17 23:30
文章分类

全部博文(54)

文章存档

2013年(4)

2012年(7)

2011年(15)

2010年(28)

分类: 嵌入式

2010-12-17 01:15:46

类似于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) |
给主人留下些什么吧!~~