【问题标题】:Mechanism to ensure a loop ends确保循环结束的机制
【发布时间】:2009-07-23 22:52:36
【问题描述】:

在我上大学的时候,我们有一个来自 David Parnas 的客座讲座。在其中他提到了一种机制,用于保证循环(while 循环、for 循环等)在某个时刻安全退出。他嘲笑没有人知道它是什么的事实……可悲的是,多年后我也不知道。有谁知道这个机制叫什么?

【问题讨论】:

    标签: language-agnostic language-features


    【解决方案1】:

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

    【讨论】:

    • 我相信就是这样。谢谢
    【解决方案2】:

    这个问题似乎不合逻辑。

    除了创建一个你知道会被命中的后置条件之外,没有任何保证可以确保循环退出,即增加一个计数器,不要触摸循环内的计数器,并有一个最大值来命中。

    您还可以创建一个计时器或其他结构来检查循环是否耗时过长。

    Parnas 在这里暗示了什么?通用退出任何不干扰逻辑或仅设计适当后置条件的循环?

    【讨论】:

    • “创建一个你知道会被命中的后置条件”,是“确保循环退出的一个保证”。这在所有情况下都非常非常容易设计。实际上,您必须设计终止条件。
    【解决方案3】:

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

    1. 不要写成无限的
    2. 其他的留作练习

    说真的,最好的方法是保持简单,并拥有一个稳定且经过全面测试的终止条件(即检查是否应该运行另一次迭代或退出的代码)。

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2019-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-17
        • 2013-10-29
        • 2019-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多