机器人卡雷尔学习 C 语言
新疆农业大学计算机与信息工程学院
张太红、陈燕红编著,2013 年 9 月
斯坦福大学计算机科学系
埃里克·罗伯茨著 (Java版),2005年9月
目 录
第一章 机器人卡雷尔简介 1
1.1 什么是卡雷尔? 1
1.2 卡雷尔的世界 2
1.3 卡雷尔能做什么? 2
1.4 卡雷尔及面向过程的编程范式 3
1.5 实践经历的重要性 3
1.6 编写及运行卡雷尔程序 4
第二章 卡雷尔编程 11
2.1 解决更有趣的问题 13
2.2 定义新函数 14
2.3 问题分解 18
2.4 选择正确的分解 20
第三章 卡雷尔控制语句 22
3.1 条件语句 22
3.2 迭代语句 24
3.3 解决普适问题 26
第四章 逐步求精 30
4.1 逐步求精练习 30
4.2 自顶向下设计的基本原则 31
4.3 精练第一个子问题 31
4.4 下级级别子问题的编码 32
4.5 事前条件和事后条件 33
4.6 收尾工作 34
第五章 算法 36
5.1 解决一个迷宫问题 36
5.2 锥块数量翻倍问题 37
第六章 超级卡雷尔(SuperKarel ) 40
6.1 右转(turnRight )和掉头(turnAround )函数 40
6.2 使用颜色 40
6.3 随机行为 40
6.4 逻辑操作 41
附录A 卡雷尔速查表 42
第一章 机器人卡雷尔简介
上世纪70年代,斯坦福大学的毕业生里奇·帕蒂思(Rich Pattis )认为如果
学生能在一个简单的环境中学习程序设计的基本思想,而不是纠缠于大多数编程
语言的复杂特性将会有助于程序设计基本原理的教学。受麻省理工数学家西
摩·佩伯特 (Seymour Papert )主持的 LOGO (一种类似于LISP 的程序设计语言)
项目成功的启发,里奇·帕蒂思设计了一个启蒙式编程环境。该环境中有一个机
器人,学生在此编程环境中指导这个机器人去解决一些简单问题,为了纪念捷克
剧作家卡雷尔·恰佩克 (Karel Capek ,他1923的剧作《罗森的通用机器人》
(Rossum’s Universal Robots )创造了robot这个英语词汇),该机器人名叫卡雷
尔(Karel)。卡雷尔机器人项目曾经相当成功,该项目在美国各大学用于计算
机科学导论的教学,以至于里奇·帕蒂思的配套教材售出10多万套。一届又一届
的CS106A (程序设计方法学课程)学生通过挑战卡雷尔的性能学会了计算机程
序工作的机理。好景不长,上世纪90年代中期,我们使用的卡雷尔机器人模拟器
停止工作了。当然我们很快得到了可以在西斯解释器(Thetis interpreter ,一种
C语言解释执行器)中运行的卡雷尔版本。但是,2004年CS106A课程从C语言转
向Java语言,卡雷尔再次停摆。三个学期之后,卡雷尔的空白由尼克 ·帕兰特(Nick
Parlante )的Binky world填补了。重新设计实现的卡雷尔即兼容Java也兼容Eclipse
开发环境,这意味着学生从学习Java课程一开始就可以练习使用Eclipse编辑器和
调试器。2013年,新疆农业大学的张太红教授实现了C语言版的卡雷尔,并完全
兼容了尼克·帕兰特的Java版卡雷尔的游戏世界(Worlds )。
1.1 什么是卡雷尔?
卡雷尔是生活在一个简单世界里的简单机器人,通过向卡雷尔发出一组命
令,你可以指挥卡雷尔在它的世界里执行一定的任务,编制这些命