Dijkstra'nın belirsiz bir program örneği


12

Selamlar. Dijkstra, birkaç basit görünen kod satırının bile umutsuzca belirsiz olabileceğini yazdı. Şimdi hayatımı kurtarmak için bulamadığım en az bir çalışmada, bu belirsizliği göstermek için küçük bir örnek program verdi. Birisi beni bu örneklerden birini içerdiği bir makaleye yönlendirebilir mi?

Yanıtlar:


11

Oku bunu:

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

http://www.cs.ucsb.edu/~pconrad/cs40/08S/notes/ iyi bir kapsama sahiptir; "halting problem" için arama yap

Temel durma çelişkisinin çeşitli biçimleri vardır.

def halts( code_block ):
    # Some magical code

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

"Whistler" sıfır, bir kez mi yoksa sonsuz sayıda mı ıslık çalıyor?

Eğer halts()fonksiyon fonksiyonu olduğunu tespit whistlerdurdurmak için görünür işlev whistlerdurduramaz.

Eğer halts()fonksiyon fonksiyonu belirlerse whistlerdurdurmak, fonksiyon görünmüyor whistlersantraline de.

Bu nedenle, halts()işlev mevcut olamaz.


4
Üçüncü seçeneği unuttun FILE_NOT_FOUND; burada geri dönüyor ;)
FrustratedWithFormsDesigner

2
Teşekkürler! Yine de Dijkstra'nın okuduğum makalede tanımladığı şey, durma problemi değildi. Sadece birkaç satır basit kod, ama ne anlama geldiğini söyleyemezsiniz. Bağlam, Dijkstra'nın kitlelere programlamanın zor olduğunu göstermek için kullandığı yöntemler hakkında konuşmasıdır, bu nedenle programcılar alçakgönüllü olmalıdır. Makalenin böyle olmadığını, "Mütevazi Programcı" demekten üzgünüm. :)
Dijkstra Okuyucu


Tekrar teşekkürler. Üzgünüz, bu o değil. Bahsettiğim makalede, Dijkstra özellikle programlamanın zor olduğunu söylüyor, zeki insanlar için bile, "Örneğin, aşağıdaki küçük program ne yapıyor?"
Dijkstra Reader

Muhtemelen cs.utexas.edu/~EWD/transcription/EWD03xx/EWD340.html değil . Ama bunu programlamanın ne kadar zor olduğuna dair ortak bir alıntı olarak kaldırıyorum.
S.Lott

2

Kağıdın Dijkstra tarafından yazıldığından emin misiniz? Ken Thompson'ın Güvenin Güvendiği Düşünceler kulağa düşündüğünüz gibi gelebilir. Kesinlikle basit, anlaşılır ve doğru programların, kaynakta hiç görülmeyen, kesinlikle beklenmedik bir şey yaparak ne kadar kurtulabileceğini gösterir. Düşündüğün şey olmasa bile, okunması faydalı bir kağıttır.

Farklı bir yöne gitmek, şaşırtıcı davranışlara sahip kısa programların mükemmel örneklerini istiyorsanız, el yapımı C yarışması harika. Örneğin 2008 kazananına bakın. Zorluk, resmin görsel olarak mükemmel bir şekilde boşaltılacağı şekilde bir resmin bir kısmını boşaltmak için bir komut satırı programı yazmaktı, ancak dosya görüntünün düzeltilmiş kısmı hakkında bazı bilgileri koruyor. VE böylece kodunuz kod incelemesi geçebilir. (Resmin kaydedileceği formatı seçebilirsiniz.)


Teşekkür ederim! Evet, kesinlikle bahsettiğim Dijkstra'nın bir makalesi.
Dijkstra Okuyucu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.