您的位置:首页 > 其它

TLS chapter9:turing halting problem图灵停机问题

2015-08-05 18:13 501 查看
The Little Schemer的第九章中介绍了图灵停机问题。

下面用scheme对文中的代码加以概括。

图灵停机问题:是否存在一个程序,对任何程序的在给定的输入下它能判定该程序是否会停止。

假设我们存在一个程序,它可以判定任何程序在给定输入后是否停机,这个程序称为will-stop?.如果程序能停止,则will-stop?返回#t, 否则返回#false

我们用这个程序测试一些常见情况:

1.对length,
(define lenght
(lambda (lat)
(cond
((null? lat) 0)
(else (+ 1 (length (cdr))))
)
)
)

(will-stop? length)明显返回#t

2.对死循环eternity,
(define eternity
(lambda (x) (eternity x))
)


(will-stop? eternity)明显返回#f

3.现在我们定义一个last-try函数,
(define last-try
(lambda (x)
(and (will-stop? last-try) (eternity x))
)
)


如果(will-stop? last-try)为#t,即last-try会停止,则last-try则会执行(eternity x)。(eternity x)是个死循环,这回导致last-try会永远执行下去,这表明(will-stop? last-try)为#t的判断是错误的。

如果(will-stop? last-try)为#f,即last-try不会停止,则last-try则会返回#f,这时last-try函数的执行停止了。这表明(will-stop? last-try)为#f的判断是错误的。

结论:我们无法找到可以对任何一个程序在给定输入的情况下判断该程序是否会停止的程序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: