确保循环结束的机制

时间:2009-07-23 22:52:36

标签: language-agnostic language-features

当我在大学时,我们接受了大卫帕纳斯的客座讲座。在其中他提到了一种机制,用于保证循环(while循环,for循环等)在某些时候安全退出。他嘲笑这样一个事实:没有人知道它是什么......可悲的是,多年后我也不知道。有谁知道这个机制叫什么?

4 个答案:

答案 0 :(得分:2)

这个问题似乎不合逻辑。

没有一个人可以确保循环退出而不是创建一个你知道会被击中的后置条件,即增加一个计数器,不要触摸循环内的计数器并且有一个最大值来击中它。 / p>

您还可以创建计时器或其他结构来检查循环是否花费太长时间。

Parnas在这里暗示什么?任何循环的通用出口,不会干扰逻辑或只是设计适当的后置条件?

答案 1 :(得分:2)

根据他的专业领域(包括正确性的正式证明)判断,我认为他的意思是loop variant,这是用于证明循环终止的一般技术。

答案 2 :(得分:1)

有很多方法可以保证循环安全退出:

  1. 不要把它写成无限
  2. 其他人留作练习
  3. 说真的,最好的方法是保持简单,并获得稳定且经过充分测试的终止条件(即检查是否应该运行另一次迭代或退出的代码)。

    你所描述的内容很可能被翻译成halting problem,这是一个众所周知的问题,没有解决方案。

    此外,Google搜索显示David Parnas在利默里克大学工作,您可以打电话给他们并要求与他交谈。我相信他会很高兴你还在努力学习他当时教给你的东西:)

答案 3 :(得分:1)

您的客座讲师可能指的是 Cycle Detection ,这是一种检测无限循环的方法。

This blog post描述了链表中无限循环的检测。有趣的是,它使用与维基百科文章相同的术语。