我们知道,循环本身是没有返回值的。所以在纯函数式语言下,跟IO有关的循环才有足够的副作用来产生价值。于是利用IO Monad,我们就可以实现循环了。循环是一个函数:
1 def ioloop count code =
2 let
3 def _loop index =
4 if (index>=count)
5 iovoid
6 ((code index) >>> (_loop (index+1)))
7 in _loop 0
这个函数输入count,然后执行code。code接受一个参数代表目前循环的次数,循环次数从0到count-1之后结束。最后函数返回IO void。如果循环中出现错误,那么立刻返回错误。我们可以尝试写一段代码:
1 def main125 = do
2 writeln "现在开始计算1到10的平方:";
3 ioloop 10 \index->do
4 number = return (index+1);
5 write ((itoa number) + "*" + (itoa number) + "=");
6 square = return (number * number);
7 writeln (itoa square);
8 end;
9 writeln "结束!";
10 end
执行结果如下:
1 现在开始计算1到10的平方:
2 1*1=1
3 2*2=4
4 3*3=9
5 4*4=16
6 5*5=25
7 6*6=36
8 7*7=49
9 8*8=64
10 9*9=81
11 10*10=100
12 结束!
13 main125返回值:(system.success (system.pair <VOID> <USER>))
posted on 2008-12-15 07:56
陈梓瀚(vczh) 阅读(2145)
评论(2) 编辑 收藏 引用 所属分类:
脚本技术