ตัวอย่างของโปรแกรมที่ไม่ชัดเจนของ Dijkstra


12

Memorial ~ Dijkstra เขียนว่าแม้แต่โค้ดง่ายๆที่ดูเหมือนไม่กี่บรรทัดก็อาจจะคลุมเครืออย่างไร้ความหวัง ในงานอย่างน้อยหนึ่งงานซึ่งตอนนี้ฉันไม่สามารถช่วยชีวิตตัวเองได้เขาได้จัดโปรแกรมตัวอย่างเล็ก ๆ น้อย ๆ เพื่อแสดงความคลุมเครือนี้ ใครช่วยชี้ให้ฉันดูกระดาษของเขาที่ซึ่งเขามีหนึ่งในตัวอย่างเหล่านี้ได้หรือไม่?

คำตอบ:


11

อ่านนี่:

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 )

"วิสต์เลอร์" เป่านกหวีดเป็นศูนย์ครั้งเดียวหรือเป็นจำนวนครั้งไม่สิ้นสุด?

หากhalts()ฟังก์ชั่นพิจารณาว่าฟังก์ชั่นwhistlerดูเหมือนจะหยุดทำงานwhistlerจะไม่สามารถหยุดได้

หากhalts()ฟังก์ชั่นพิจารณาว่าฟังก์ชั่นwhistlerนั้นไม่ปรากฏหยุดทำงานฟังก์ชันจะwhistlerหยุด

ดังนั้นhalts()ฟังก์ชั่นที่ไม่สามารถอยู่ได้


4
คุณลืมตัวเลือกที่สามที่มันจะกลับมาFILE_NOT_FOUND;)
FrustratedWithFormsDesigner

2
ขอบคุณ! สิ่งที่ Dijkstra อธิบายไว้ในกระดาษที่ฉันอ่านไม่ใช่ปัญหาการหยุดชะงัก มันเป็นโค้ดง่ายๆสองสามบรรทัด แต่คุณไม่สามารถบอกความหมายได้ บริบทคือ Dijkstra กำลังพูดถึงวิธีการที่เขาใช้แสดงให้ผู้ชมเห็นว่าการเขียนโปรแกรมนั้นยากดังนั้นโปรแกรมเมอร์จึงต้องถ่อมตัว โปรดทราบว่ากระดาษไม่ใช่ฉันเสียใจที่จะพูดว่า "The Humble Programmer" :)
Dijkstra Reader

คุณกำลังพูดถึงcs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD658.html ?
S.Lott

ขอบคุณอีกครั้ง. น่าเศร้าที่พูดไม่ได้ ในบทความที่ฉันพูดถึง Dijkstra กล่าวว่าการเขียนโปรแกรมเป็นเรื่องยากแม้สำหรับคนที่ฉลาดเราต้องเคารพว่า "ตัวอย่างเช่นโปรแกรมเล็ก ๆ ต่อไปนี้ทำอะไร"
Dijkstra Reader

อาจจะไม่cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html แต่ฉันยกมันขึ้นเป็นการอ้างอิงทั่วไปเกี่ยวกับวิธีการเขียนโปรแกรมยาก
S.Lott

2

คุณแน่ใจหรือไม่ว่าเอกสารนั้นเป็นของ Dijkstra ภาพสะท้อนของความไว้วางใจที่ไว้วางใจโดย Ken Thompson ดูเหมือนว่าอาจเป็นสิ่งที่คุณคิด มันแสดงให้เห็นถึงความเรียบง่ายตรงไปตรงมาและโปรแกรมที่ถูกต้องสามารถยุติการทำสิ่งที่ไม่คาดคิดอย่างที่ไม่สามารถมองเห็นได้ในแหล่งที่มา แม้ว่ามันจะไม่ใช่สิ่งที่คุณคิดมันเป็นกระดาษที่คุ้มค่าที่จะอ่าน

ไปในทิศทางที่แตกต่างถ้าคุณต้องการตัวอย่างที่ดีเยี่ยมของโปรแกรมสั้น ๆ ที่มีพฤติกรรมที่น่าประหลาดใจ ตัวอย่างเช่นดูที่ผู้ชนะปี 2008 ความท้าทายคือการเขียนโปรแกรมบรรทัดคำสั่งเพื่อลบส่วนหนึ่งของรูปภาพออกไปในลักษณะที่ภาพนั้นถูกทำให้ว่างเปล่าอย่างสมบูรณ์แบบ แต่ไฟล์เก็บข้อมูลบางอย่างเกี่ยวกับส่วนที่ทำ redacted ของภาพ และในลักษณะที่รหัสของคุณสามารถผ่านการตรวจสอบรหัสได้ (คุณสามารถเลือกรูปแบบที่เก็บรูปภาพไว้ได้)


ขอบคุณ! ใช่มันเป็นกระดาษโดย Dijkstra ที่ฉันพูดถึง
Dijkstra Reader
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.