web-dev-qa-db-ja.com

ダイクストラの曖昧なプログラムの例

あいさつ。ダイクストラ氏は、一見単純そうに見えるコードのほんの数行でさえ、絶望的にあいまいになる可能性があると書いている。私の人生を救うために今は見つけられない少なくとも1つの作品で、彼はこのあいまいさを実証するための小さなプログラム例を示しました。誰かが私に彼のこれらの例の1つが含まれている彼の論文を指摘できますか?

12
Dijkstra Reader

これを読む:

http://en.wikipedia.org/wiki/Halting_problem#Recognizing_partial_solutions

http://www.cs.ucsb.edu/~pconrad/cs40/08S/notes/ は適切にカバーされています。 「停止問題」を検索

本質的な停止の矛盾にはいくつかの形式があります。

_def halts( code_block ):
    # Some magical code

def whistler():
    while halts(whistler): 
        sys.whistle( 1 )
_

「ホイッスラー」は、ゼロ回、1回、または無限回の回数ですか。

halts()関数が、関数whistlerが停止していると判断した場合、関数whistlerは停止できません。

halts()関数が関数whistlerが停止していないと判断した場合、関数whistlerは停止します。

したがって、halts()関数は存在できません。

11
S.Lott

論文はダイクストラによるものでしたか? 信頼を信頼することについての反省 ケン・トンプソンによるそれはあなたが考えていたものかもしれないように聞こえます。これは、絶対にシンプルで単純で正しいプログラムが、ソースにはまったく表示されないまったく予期しない何かを実行する方法を示しています。それがあなたが考えていたものではなかったとしても、読むことは価値のある論文です。

別の方向に進んで、驚くべき振る舞いのある短いプログラムの優れた例が必要な場合は、下手なCコンテストが最適です。たとえば the 2008 の勝者を見てください。問題は、画像の一部を空白にするコマンドラインプログラムを作成して、画像を視覚的に完全に空白にできるようにすることですが、ファイルには画像の編集された部分に関する情報が保持されます。 [〜#〜]および[〜#〜]を使用して、コードがコードレビューに合格するようにします。 (画像の保存形式を選択できます。)

2
btilly