Fuxi语言的循环问题
和过程型语言不同, Fuxi语言没有象C、JAVA等那样的for循环语句。但是程序中不可能没有重复执行的过程,Fuxi语言是怎样解决这一问题的呢?
Fuxi语言是一种多范型程序设计语言,具有强大的表处理功能。我们可以利用其表扫描函数scan来实现循环功能。在Fuxi的基本类库中,有一个Iterator类,它是一个成员为int型的整数表。Iterator类包括以下几个构造函数:
|
|
|
|
public Iterator( int nCount ) = bool
public Iterator( int iStart, int iEnd ) = bool
public Iterator( int iStart, int iEnd, int iStep ) = bool |
|
|
|
|
我们可以定义一个Iterator对象,设定循环的次数、范围,然后对该Iterator进行扫描,便可实现循环功能。例如:
|
|
|
|
import fuxi.*
public class IterApp:
Applet
{
Iterator i(10)
public Activate() =
i.scan(){ System.Console.Println( "Hello,World!" ) }
} |
|
|
|
|
该程序就可以循环打印10次“Hello, World!”
一个值得注意的问题是: scan()是函数,
是一个高阶函数,
其执行的结果是一个值。这一点和过程型语言(如C、JAVA等)的for
循环语句不同。上面的例子是scan()函数的一个最简单的应用。scan()函数的完整定义如下:
|
|
|
|
<表变量名>.scan(<成员变量名>,
<运算符>, <初始值>, <条件>) {...} |
|
|
|
|
scan()函数的含义是,把一个表的成员依次的取出,如果<条件>为true,则作用到后面的{...}上,并把作用的结果应用到scan()函数所指定的运算符上;如果<条件>false,直接退出,并返回结果。
在缺省的情况下,<运算符>为&&;<初始值>为true;而<条件>为true。对于不同的运算符,系统定义了不同的<初始值>:&&为true,
||为false,其它为0。
如果我们想计算1..100的和,就可以这样编程:
|
|
|
|
import fuxi.*
public class
累加应用: Applet
{
public Activate() =
let
{
Iterator 循环量 = Iterator(1, 100)
}
in
{
System.Console.Println( "1 +...+ 100 = ",
循环量.scan(x, +){x} }
}
} |
|
|
|
|
|