2009-07-23 11 views
1

私は大学にいたときに、David Parnasのゲスト講義を受けました。その中で、ループ(whileループ、forループなど)がある時点で安全に終了することを保証するために使用されるメカニズムについて述べました。彼はそれが何であるかを誰も知らなかったという事実を嘲笑した。悲しいことは何年も後に私はどちらも知らないということだ。誰がこのメカニズムが呼ばれているか知っていますか?ループを確実にする仕組み

答えて

2

彼の専門分野(正当な正当な証明が含まれています)から判断すると、私は彼がloop variantを意味していると思います。これはループ終了を証明する一般的なテクニックです。

+0

私はこれがそうだったと信じています。ありがとうございました –

2

この質問は非公式です。

あなたが知っているポストコンディションを作る、つまりカウンターを増やしたり、ループ内のカウンターに触れたり、ヒットするのを最大限に抑えたりする以外に、ループが終了するようにするための装置はありません。

ループが長すぎるかどうかを確認するためにタイマーまたは別の構造を作成することもできます。

パルナスは何を意味していましたか?論理に干渉しない、または適切な事後条件を設計するだけのループへの普遍的な出口?

+0

"あなたが知っていることが分かっている投稿条件を作成する"は、 "ループを終了させるための1人の仲間"です。これは、すべての場合において非常に簡単に設計することができます。確かに、あなたは**終端条件を設計しなければなりません**。 –

1

ループが無事に終了することを保証するために多くの方法があります。

  1. は最高、
  2. 他の人が真剣に運動し

として残されている無限大にそれを書いてはいけません安定した、完全にテストされた終了条件(つまり、別の反復または終了を実行するかどうかをチェックするコード)を持つことです。

あなたが説明した内容は、解決策のないよく知られた問題であるhalting problemに非常によく翻訳される可能性があります。

また、Google検索では、David Parnasがリムリック大学で働いていることが明らかになりました。あなたはそれらを呼び出して、彼と話をすることができます。私は彼があなたはまだ彼が戻ってあなたを教えから学ぶしようとしている:)

+0

+1:それは終了を保証するための設計規律です。 –

1

あなたのゲスト講師は、Cycle Detectionに無限ループを検出する方法を参照されている可能性があり嬉しくなると確信しています。

This blog postは、リンクリスト内の無限ループの検出を記述する。興味深いことに、Wikipediaの記事と同じ用語を使用しています。