Plankalkül

Plankalkül()是康拉德·楚澤在1942至1945年间,出于工程目的而设计的一种编程语言。它是第一种为计算机设计的高级编程语言。

“Kalkül”在德语中意为形式系统。如希尔伯特演绎系统原本名为“Hilbert-Kalkül”那样,“Plankalkül”指用于规划(planning)的形式系统。

描述
Plankalkül可比较于APL和关系代数。它包括赋值语句、子例程、条件语句、迭代、浮点算术、阵列、层级记录结构、断言、例外处理和其他高级特征比如目标导向执行。Plankalkül提供了叫做“广义图”()的数据结构,它可以被用来表示几何结构。

Plankalkül的很多特征重现于后来的编程语言之中;一个例外是其特质性的使用占据多行的表示法。

Plankalkül的一些特征:

  • 只有局部变量,
  • 函数不支持递归,
  • 只支持传名调用,
  • 合成类型是阵列和元组,
  • 包含条件表达式,
  • 包含for循环和while循环,
  • 没有goto。

数据类型
在Plankalkül中唯一的原始数据类型是单一的“是否值”()即布尔值。它被指称为标识符 S0。所有进一步的数据类型都是合成的,并且从原始类型通过“阵列”和“记录”的方式建造而成。

所以8位序列(这在现代计算中被当作字节)被指称为8 \times S0,而大小为 m乘n的布尔阵列,被描述为m \times n \times S0。还存在更短的表示法,可以将n \times S0替代为S1 \cdot n,它叫做“n位是否值序列”():

*输入值(),标记以字母V。
*中介值,临时值(),标记以字母Z。
*常值(),标记以字母C。
*输出值(),标记以字母R。

特定的某种变量由写在种类之下的编号来标示。

例如下列表达式:

有人宣称Konrad Zuse最初使用图元作为赋值的符号,并在的影响下开始使用\Rightarrow。

算子\mu x(x \in l \and R(x))和\lambda x(x \in l \land R(x))意图用在迭代运算之中,\mu x对变量l进行递增索引的遍历,而\lambda x对其进行递减索引的遍历,找出其符合特定条件R()的下一个(含第一个)元素x。典型用法是将在局部变量x中的符合条件元素赋值到中间变量之中,然后在用竖杠\left| \right. 分隔出的后续语句之中,在前面语句成功找到符合条件的元素之时对此中间变量做进一步处理。

术语
Zuse称呼一个单一的程序为“计算规划”()。他设想其所称谓的“规划组装设备”(),能自动的将一个程序的数学公式转换成机器可读的打孔电影胶片,这是在今天称为翻译器或编译器的某种东西。

例子
下面的例子程序计算整数的阶乘:

\begin{align}
& \quad P1.1 \\
&\; \, \begin{array}{r}
\\
V \\
K \\
A \\
\end{array} \left| \; \begin{array}{lll}
R(V) & \Rightarrow& R\\
\, \quad 0 & & 0 \\
& & \\
\quad 10 & & 10 \\
\end{array} \right. \\
& \; \, \begin{array}{r}
\\
V \\
K \\
A \\
\end{array} \left| \; \begin{array}{lll}
1 & \Rightarrow& R\\
& & 0 \\
& & \\
10 & & 10 \\
\end{array} \right. \left| \; \begin{array}{lll}
V + 1 & \Rightarrow& Z\\
0 & & 0 \\
& & \\
10 \; \; \; 10 & & 10 \\
\end{array} \right. \\
&\; \, \begin{array}{r}
\\
V \\
K \\
A \\
\end{array} \left| \; \begin{array}{l} W2(Z) \\ \quad \quad 0 \\ \\ \quad \quad 10 \end{array} \left [ \begin{array}{l}
i > 0 & \dot{\rightarrow} \\ \\ \\ 10 \; \; 10 & \\ \end{array} \left[ \begin{array}{lll}
R \times i & \Rightarrow & R\\ 0 & & 0 \\ & & \\ 10 \; \; \; 10 & & 10 \end{array} \right] \right] \right.
\end{align}

这里的Zuse定义的用户类型A10表示全部整数。第一行包含“边界概要”(),它定义程序P1.1接受一个变元(实际参数),即叫做\begin{smallmatrix} V \\ 0 \end{smallmatrix}的一个整数,并返回叫做\begin{smallmatrix} R \\ 0 \end{smallmatrix}的一个整数。这个程序将1赋值到\begin{smallmatrix} R \\ 0 \end{smallmatrix},将\begin{smallmatrix} V \\ 0 \end{smallmatrix} + 1赋值到\begin{smallmatrix} Z \\ 0 \end{smallmatrix}。接着迭代算子W2执行重复运算,将从\begin{smallmatrix} Z \\ 0 \end{smallmatrix} - 1递减至0的值,依次赋值到局部变量i,这里将大于0的i值累乘至\begin{smallmatrix} R \\ 0 \end{smallmatrix}。当重复结束之时,值\begin{smallmatrix} R \\ 0 \end{smallmatrix}就包含了变元的阶乘。

Zuse还定义了用户类型A8表示自然数,A9表示非负整数,A11表示非负分数,A12表示全部分数,A13表示复数。迭代算子W0、W1和W2接受一个非负整数n,W0只重复n次而不赋值局部变量,W1重复时将从0递增至n-1的值赋值给局部变量i;迭代算子W3、W4和W5接受两个非负整数(n,m)并赋值到局部变量i,W3在n时从n递增至m-1,W4在n>m时从n递减至m+1,W5在n时从n递增至m-1而在n>m时从n递减至m+1。使用W4(\begin{smallmatrix} V \\ 0 \end{smallmatrix}, 0),可以省略\begin{smallmatrix} V \\ 0 \end{smallmatrix} + 1的初始值设置,和i > 0的守卫条件判断。

引用
延伸阅读
*

外部链接

  • (NB. Plankalkül Java applets and documents.)

评论 (0)

  • 还没有评论,来抢沙发吧。