不使用go to语句的论点不是什么新观点。我记得曾经读过一篇明确说明应该限制go to语句的建议性**,但是现在无法找到它的出处了;推算起来,它可能是C. A. R. Hoare写的。[1, Sec. 3.2.1]中,在建议使用case construction方面,Wirth和Hoare一起得出了结论:“类似条件从句,case construction比起go to语句和switches更能清晰的描述program的动态结构,并且可以大量减少program中标签的使用。”
当我们引入条件从句(if B then A)、二选一的选择从句(if B then A1 else A2)、由C. A. R. Hoare发明的多选一的选择从句(case[i] of (A1, A2, …, An)),或者由J. McCarthy发明的条件表达式(B1 → E1, B2 → E2, …, Bn → En)以后,process的过程中必存在一个文本索引。
现在我们考虑循环从句(比如while B repeat A或者repeat A until B)。逻辑上讲,这样的从句是多余的,因为我们可以用递归的procedures来描述循环。但是由于现实如此,所以我也不想排除循环从句:一方面,循环从句可以通过现在的有穷设备很方便的实现;另一方面,被称作“归纳”的推理模式可以使我们的思维仅仅抓住由循环从句产生的过程。在循环从句的内部,文本索引对于描述process的动态过程不再有效。然而,在循环从句的每一次进入时,我们可以联合使用一种叫做“动态索引”的机制,客观地计算当前相应循环的循环次数。因为循环从句可以嵌套使用(就像procedure被调用一样),我们会发现,现在的process过程可以被文本或者动态的混合序列独一无二的描述。