Ví dụ của Dijkstra về một chương trình mơ hồ


12

Lời chào. Dijkstra đã viết rằng ngay cả một vài dòng mã có vẻ đơn giản cũng có thể mơ hồ một cách vô vọng. Trong ít nhất một tác phẩm mà bây giờ tôi không thể tìm thấy để cứu mạng mình, ông đã đưa ra một chương trình ví dụ nhỏ để chứng minh sự mơ hồ này. Bất cứ ai có thể chỉ cho tôi một bài báo của anh ấy, nơi anh ấy bao gồm một trong những ví dụ này?

Câu trả lời:


11

Đọc này:

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

http://www.cs.ucsb.edu/~pconrad/cs40/08S/notes/ có phạm vi bảo hiểm tốt; tìm kiếm "vấn đề tạm dừng"

Có một số hình thức của mâu thuẫn tạm dừng thiết yếu.

def halts( code_block ):
    # Some magical code

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

Liệu "người huýt sáo" huýt sáo bằng không, một lần hay vô số lần?

Nếu halts()chức năng xác định rằng chức năng có whistlervẻ dừng lại, chức năng whistlerkhông thể dừng lại.

Nếu halts()chức năng xác định rằng chức năng whistlerkhông xuất hiện tạm dừng, chức năng sẽ whistlerdừng lại.

Do đó, halts()chức năng không thể tồn tại.


4
Bạn đã quên tùy chọn thứ ba, nơi nó trả về FILE_NOT_FOUND;)
FrustratedWithFormsDesigner

2
Cảm ơn! Những gì Dijkstra đã mô tả trong bài báo mà tôi đọc không phải là vấn đề tạm dừng. Đó chỉ là một vài dòng mã đơn giản, nhưng bạn không thể biết ý nghĩa của nó. Bối cảnh là Dijkstra đang nói về các phương pháp mà anh ta sử dụng để chứng minh cho khán giả thấy lập trình là khó, do đó các lập trình viên phải khiêm tốn. Lưu ý rằng bài báo không phải, tôi buồn khi nói, "Lập trình viên khiêm tốn." :)
Độc giả Dijkstra


Cảm ơn một lần nữa. Thật buồn khi nói rằng đó không phải là một. Trong bài báo mà tôi đang đề cập, Dijkstra đặc biệt nói rằng lập trình rất khó, ngay cả đối với những người thông minh, chúng ta phải tôn trọng điều đó, "Ví dụ, chương trình nhỏ sau đây làm gì?"
Độc giả Dijkstra

Có lẽ không phải cs.utexas.edu/~EWD/transcrip/EWD03xx/EWD340.html . Nhưng tôi nâng nó lên như một trích dẫn phổ biến về việc lập trình khó như thế nào.
S.Lott

2

Bạn có chắc chắn rằng bài báo là của Dijkstra? Những phản ánh về sự tin tưởng của Ken Thompson nghe có vẻ như đó là những gì bạn đang nghĩ đến. Nó cho thấy các chương trình hoàn toàn đơn giản, đơn giản và chính xác có thể kết thúc như thế nào khi làm điều gì đó hoàn toàn bất ngờ mà không thể nhìn thấy trong nguồn. Ngay cả khi đó không phải là những gì bạn đang nghĩ, nó là một bài báo đáng để đọc.

Đi theo một hướng khác, nếu bạn muốn có những ví dụ tuyệt vời về các chương trình ngắn với hành vi đáng ngạc nhiên, cuộc thi C ngầm là tuyệt vời. Ví dụ nhìn vào người chiến thắng năm 2008 . Thách thức là viết một chương trình dòng lệnh để xóa một phần của hình ảnh, theo cách mà hình ảnh được hiển thị hoàn hảo, nhưng tệp vẫn giữ một số thông tin về phần được làm lại của hình ảnh. theo cách mà mã của bạn có thể vượt qua đánh giá mã. (Bạn có thể chọn định dạng mà hình ảnh được lưu trữ.)


Cảm ơn bạn! Vâng, đó chắc chắn là một bài báo của Dijkstra mà tôi đang đề cập đến.
Độc giả Dijkstra
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.