从电路理论走向计算计划

Plankalkül是德国工程师康拉德·楚泽在20世纪40年代构思的程序记法,其名称可理解为“程序演算”。1942至1943年,他撰写一份拟作博士论文的手稿,研究逻辑公式与继电器电路的联系;这份未提交的研究后来延伸为如何表达完整计算过程的问题。

1945年,楚泽带着Z4计算机离开柏林,抵达巴伐利亚阿尔卑斯山区的欣特施泰因。机器建造工作受到战后条件限制,他继续整理计算计划的表达方式,完成Plankalkül手稿。其早期形态主要是个人设计与纸面程序,而非已经配有编译器的商品软件。

参考:[1] [4]

把数据结构写进程序

在鲍尔和沃斯纳1972年的分析中,Plankalkül以“是—否”值为基本数据,再组合成位序列、数组和记录。数据不仅是一个数字,也可以是由不同组成部分构成的对象,程序能用索引选择其中的部分。

它的记号分布在多行:主行写运算,下面另列变量编号、组成部分索引和结构说明。V表示输入值,Z表示中间值,R表示结果。这种排版把数据身份与结构展示在纸面上,却也给后来按单行文本处理程序的分析器带来了困难。

参考:[1] [4]

以棋盘说明结构化对象

楚泽1959年发表的说明用国际象棋展示数据结构。一个坐标由三个二值位表示,一对坐标构成棋盘上的一点;该点的占用状态又另用编码记录。把坐标与占用情况组合,就能表达某格放着哪一枚棋子。

六十四个格子的占用值组成整个棋盘。更完整的局面还要记录轮到哪方走棋、王车易位条件,以及吃过路兵所涉及的位置。这样,棋局既包含空间位置,也包含规则所需要的附加状态,无法仅用棋子的总数代替。

这个例子显示Plankalkül的目标超出了通常的数值计算:先给复杂对象建立可操作的表示,再围绕这些数据定义判断和变换。1959年的图表延续了早期设计中的棋类问题研究。

参考:[2] [1]

问题说明与执行步骤

楚泽希望从描述问题的逻辑关系,进一步得到真正的计算步骤。罗哈斯的研究区分了他的“隐式”与“显式”形式:前者说明结果应满足什么关系,后者列出完成计算的具体程序。

他没有得到能普遍自动完成这种转换的方法,因而在实例中把逻辑说明放在程序前面,再由编写者给出执行步骤。赋值、条件和循环构成这种步骤表达的重要部分。Plankalkül由此同时承担描述计算要求与书写算法的作用。

参考:[4]

长期停留在文献中的设计

完整设计没有在1940年代成为广泛使用的编程系统。楚泽随后发表较短说明,包括1948至1949年《Archiv der Mathematik》中的文章,以及1959年的介绍;1945年手稿的修订刊本到1972年才由德国数学与数据处理学会出版。

同年,慕尼黑工业大学的鲍尔与沃斯纳用当时的程序设计术语重新分析该语言,指出其结构化数据与控制手段的意义,也讨论记法和定义的不充分之处。设计的历史价值与可直接投入运行的程度,是两个不同层面。

参考:[1] [4]

2000年的可运行子集

2000年2月,柏林自由大学罗哈斯等人与Feinarbeit公司的合作者报告了Plankalkül 2000。团队选择并明确化原设计的一部分规则,制作语法引导编辑器、分析器和运行系统,并把二维记法转换为可处理的线性文本。

例如,他们演示先把Z1的值赋给Z3,再判断Z1是否小于Z2;条件成立时,用Z2替换Z3。两步完成后,Z3保存两个数中较大的一个。变量、比较条件和赋值分别承担明确任务。

该实现使用Java运行系统显示变量内容,用户可以设置输入并检查输出;分析器把线性程序转成中间代码。团队对含糊规则作了取舍,暂未纳入全部集合及谓词逻辑构造,因此它是后来的实验实现,而不是1945年就已经运行的完整系统。

参考:[3]