2009-07-23 69 views
1

当我在大学时,我们有来自David Parnas的客座讲座。在这篇文章中,他提到了一个用于保证循环(while循环,for循环等)在某个时刻安全退出的机制。他嘲笑没有人知道这是什么......可悲的是,多年后我也不知道。有谁知道这个机制被称为什么?确保循环结束的机制

回答

2

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

+0

我相信就是这样。谢谢 – 2009-07-24 16:40:26

2

这个问题似乎不合逻辑。

没有一个gaurantee可以确保循环退出,而不是创建一个你知道会被命中的后置条件,即增加一个计数器,不要触摸循环内部的计数器并使其达到最大值。

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

帕纳斯在这里暗示的是什么?任何循环的普遍退出不会干扰逻辑或简单地设计适当的后置条件?

+0

“创建一个您知道会被击中的发布条件”,是“确保循环退出的一名参赛者”。这在所有情况下都非常容易设计。事实上,你必须**设计终止条件。 – 2009-07-23 23:43:10

1

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

  1. 不要写是无限
  2. ,其他的被留下作为一个锻炼; Tibial

严重的是,最好的方法是保持简单,并有一个稳定和完全测试的终止条件(即检查是否应该运行另一次迭代或退出的代码)。

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

此外,谷歌搜索显示David Parnas在利默里克大学工作,你可以打电话给他并要求与他交谈。我敢肯定,他会很高兴你还在试图:)

+0

+1:这是一个确保终止的设计原则。 – 2009-07-24 01:39:31

1

你的客座讲师可能已经提到Cycle Detection,检测无限循环的方法来从他教你回去再学。

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