中语言计算技术研究与发展联盟
舒生羽 wzyorg@gmail.com
还是在计算机程序发展史的早期,Donald Ervin Knuth就提出了“程序=数据结构+算法”的观点。这的确帮助我们认识程序指出了一个可以深入实质的方向。
程序员的工作相当大的部分就是根据各种需求,建立计算模型。也就是定义各种数据结构,并设计根据这些数据结构来实现计算功能的算法,从而最终得到程序和软件的信息处理能力。
因而,我们应该在程序语言中为定义算法和数据结构提供各种方便,这样程序员就能省去许多枯燥而重复的麻烦工作。我们在前面的文章里已经看到中语言为便捷定义算法提供了许多简捷形式和操作。基于上面的理由,我们同样在中语言里面为便捷定义数据结构提供了多种方便。
事实上,在中语言里,同C/C++一样,数据结构的定义主要是通过自定义数据类型来实现。而数据结构定义上的便捷主要是通过编译器内造的数据结构和编译器实现的数据结构间的操作(比如类的继承)以及语言的支持库来达到。
在这篇文章里,我们要介绍的是中语言提供的对于定义值的方便法门。值是数据结构的实例,是数据本身,也是计算最重要的的输入和和输出,在中语言对程序的“指称、形容、计算”三要义理解框架内是一种结合性的存在。
中语言提供叫做“结构形式值”的形式来方便定义复杂数据结构的实例,这些复杂数据结构基本上都是为中语言标准库所包含的内容,也就是大家熟知的仓、集、册、映(分别对libstdc++内的vector、set、list、map)等等。
这种形式的大致形式如下:
[指示符](参数册子){启式册子}
下面是一个应用内造的阵和标准库的仓结构形式值的例子。
来 华库.仓; 来 华库.进出流; 名{ 用 宿 准; } 道: ()->()= { //使用原始的数组结构 数列阵 := [] {2, 3, 5, 7, 11}; 周(元素 @ 数列阵) 窄控出 << 元素 << 1#' '; 窄控出 << 行尾; //使用高级的仓结构 数列仓 := [~] {2, 3, 5, 7, 11}; 数列仓.放进(13); 数列仓.放进(17); 数列仓.放进(19); //下面的形式是所谓"lambda"算式,中语言里面也将其称为简力或者无名力 /: (数列: <元>-仓-牵)->()= { 总和 := 0; 周(某 @ 数列) { 某 ^^ 2 ->+ 总和; } 窄控出 << 数列[0] << 1#"到" << 数列.提取() << 1#"之间素数的平方和是: " << 总和 << 行尾; }(数列仓); }
程序的运行效果如下: