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,
(will-stop? eternity)明显返回#f
3.现在我们定义一个last-try函数,
如果(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的判断是错误的。
结论:我们无法找到可以对任何一个程序在给定输入的情况下判断该程序是否会停止的程序。
下面用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的判断是错误的。
结论:我们无法找到可以对任何一个程序在给定输入的情况下判断该程序是否会停止的程序。
相关文章推荐
- 时间处理组件moment.js
- 浅谈如何提高编程效率?
- hdu 2586 How far away ?(LCA)
- What’s New in Swift 2
- 两种QMultiMap的遍历方法(最好使用只读遍历器)
- (FFOS Gecko & Gaia) OTA - 结束篇
- tomcat配置文件
- VIJOS-P1144 小胖守皇宫
- gzip压缩详解
- SE for Android 系列之整体概要
- php实现分页调取数据库记录
- zend 环境
- Spring.Net学习笔记五(依赖注入)
- 深入理解Android消息处理系统——Looper、Handler、Thread
- HttpClient 学习记录
- 获取指定日期是一年的第几周
- umdh windbg分析内存泄露
- 初学LTE
- CGI<百度百科>
- MySQL之查询性能优化五(优化特定类型的查询)