Dijkstra的模棱两可程序示例


12

称呼。Dijkstra写道,即使是几行看似简单的代码也可能是模棱两可的。在至少一件我现在找不到能挽救生命的作品中,他举了一个小例子程序来证明这种歧义。谁能指出我的论文,其中包括以下示例之一?

Answers:


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在谈论他用来向听众证明编程很难的方法,因此程序员必须谦虚。请注意,纸张不,我很伤心地说,“谦卑程序员。” :)
Dijkstra Reader


再次感谢。可悲的是,这不是一个。在我所指的论文中,迪杰斯特拉特别指出,即使对于聪明的人,编程也很难,我们必须尊重“例如,以下小程序会做什么?”
Dijkstra读者

可能不是cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html。但是,我将其作为对编程难度的普遍引用来提出。
S.Lott

2

您确定论文是Dijkstra撰写的吗? 肯·汤普森(Ken Thompson)对信任信任思考听起来像是您在想的。它演示了绝对简单,直接和正确的程序如何完成绝对无法预料的事情,而这些事情在源代码中根本不可见。即使不是您所想的,这也是一份值得阅读的论文。

朝着不同的方向发展,如果您想获得具有令人惊讶行为的简短程序的出色示例,那么欠缺C竞赛就很棒。例如,看看2008年的获奖者。面临的挑战是编写一个命令行程序来消隐图片的一部分,以使图片在视觉上被完美消隐,但文件保留有关图像的删节部分的某些信息。 以这样的方式,你的代码可以通过代码审查。(您可以选择图片存储的格式。)


谢谢!是的,我绝对是Dijkstra发表的论文。
Dijkstra Reader
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.