acm-header
登录

ACM通信

ACM通信

示例编程:通过删除细节进行泛化


通过演示编程(PBD)研究团体的一个长期目标是让程序员和非程序员一样,通过展示他们应该如何在示例输入上工作来构造计算机程序。ToonTalk是我从1992年开始开发的一个PBD系统,它使编程更像孩子们玩耍的方式,而不是依赖泛化启发式,它使程序员能够通过记录样本数据上的动作,然后显式地从数据结构中删除细节来构造任意程序。6岁的孩子已经用这种方式构建了各种各样的节目(见www.ioe.ac.uk/playground)。

特别重要的是在ToonTalk中创建和泛化程序的方式与ToonTalk的底层计算模型之间的相互作用。一个程序是作为一组自主进程的集合执行的,这些进程异步通信;流程的行为是通过一组保护子句指定的,这些子句由一个保护子句和一个主体组成。只有满足警卫的条件,才能执行身体的动作。子句是由在单个样本数据结构上执行的操作构造的。为了使子句能够操作其他数据结构,程序员只需要从子句的保护部分删除细节。

ToonTalk建立在“动画编程”的理念上。动画程序不是通过输入文本、创建图表或将图标串在一起来构造的。程序员是一个动画虚拟世界中的角色,在这个虚拟世界中,编程抽象被其有形的类似物所取代。例如,数据结构表示为一个框;盒子上的洞可以填上数字、文字、其他盒子、鸟、窝或机器人。反过来,鸟和巢是程序通信通道上“发送”和“接收”操作的具体类比。机器人是一个受保护的子句,程序员可以训练它在给定一个盒子时采取行动。机器人的思想泡泡显示了守卫,或机器人运行前必须满足的条件。要概括一个机器人,程序员只需要使用一个动画手持吸尘器,从机器人思维气泡内的盒子中去除细节(参见图1).

举个例子,假设一些孩子想要创造一款需要记分员的游戏。许多游戏元素需要同时更新和查询分数。孩子们认为记分员应该是一个活跃的对象;因此,一组机器人在一个盒子上工作,盒子里有一个与分数相对应的数字pad和一个巢穴,读取或更改当前分数的请求就会到达那里。在搭建好盒子后,孩子们构建一个信息来改变分数并把它给拥有鸟巢的鸟。

这只鸟飞到鸟巢里,在里面装满了信息,于是盒子就出现了[[2]改变10],它表示得分为10,并请求将其减2。孩子们把这个盒子给一个新鲜的机器人,然后引导它捡起-2然后把它扔到10.一只老鼠拿着一个大锤子,负责算术运算,把它们砸在一起产生8.然后,孩子们引导机器人拿起吸尘器,吮吸“改变”的信息。

现在,机器人已经接受了充分的训练,但只有在得分为10分并包含更改信息时才能工作-2.为了概括这个程序,孩子们用吸尘器擦掉10而且-2在机器人的思想泡泡中,所以机器人会对任何分数和任何包含算术运算的变化消息进行操作。然后,孩子们训练另一个机器人处理寻找并带回当前分数的请求。孩子们把两个机器人作为一个团队放在一起,把它们放在数字的后面,完成一个记录分数的游戏组件。


程序员是虚拟世界中的一个角色,在这个虚拟世界中,编程抽象被其有形的类似物所取代。


回到顶部

适当的计算模型

合适的计算模型大大简化了PBD系统的构建。ToonTalk的计算模型没有嵌套条件,没有复杂条件,没有非局部变量,也没有子例程调用,但ToonTalk仍然是一种富有表现力的高级编程语言。这些常见的编程抽象都会干扰PBD过程。ToonTalk的强大和简单来自于这样一个事实:一旦机器人开始工作,它只是执行“直线”代码,没有条件或过程调用。任何“变量引用”都被解析为机器人被给予的盒子或一些局部临时变量,这些变量被“具体化”为机器人被训练放在地板上的对象。

由于难以表示运行未定义过程的结果,PBD系统中过程的返回值会干扰自顶向下的编程风格。ToonTalk的过程调用相当于生成一个给鸟结果值的过程,没有出现这样的困难。鸟巢代表返回值,即使计算结果值的机器人还没有定义。递归发生在机器人生成进程以运行自身的副本时。在PBD系统中以自顶向下的方式进行编程时,改变数据结构的操作也会带来困难。这些困难在ToonTalk中不会出现,因为所有的副作用都仅限于消息通信;没有数据结构的共享。

ToonTalk通过提供每个计算抽象的具体动画模拟,使PBD过程更加具体。ToonTalk中的所有东西都可以被看到、拿起和操纵。甚至像复制和删除数据结构这样的操作都是通过动画工具表示的。

无论是训练机器人还是直接操作物体,都使用相同的物体和工具。这些模式在视觉上是由程序员控制ToonTalk房子地板上的程序员角色或机器人思想泡泡的内容来区分的。这两种模式使用了相同的技能和思维方式。

回到顶部

困难的乐趣

编程是一项具有认知挑战性的任务。程序员需要设计程序的体系结构,将大型任务分解为可管理的部分,在一系列数据结构和算法中进行明智的选择,并且,在程序构建之后,跟踪并修复不可避免的错误。允许程序员在操作表示示例输入的有形对象的同时执行这些任务,有助于减少一些复杂性。只剩下困难的乐趣。

回到顶部

作者

肯·卡恩(KenKahn@ToonTalk.com)是加州圣卡洛斯动画节目的创始人和总裁。

回到顶部

数据

F1图1。通过从ToonTalk机器人的思想泡泡中删除细节来泛化它。

回到顶部


©2000 acm 0002-0782/00/0300 $5.00

允许为个人或课堂使用本作品的全部或部分制作数字或硬拷贝,但不得为盈利或商业利益而复制或分发,且副本在首页上附有本通知和完整的引用。以其他方式复制、重新发布、在服务器上发布或重新分发到列表,需要事先获得特定的许可和/或付费。

数字图书馆是由计算机协会出版的。版权所有©2000 ACM, Inc。


没有发现记录

登录为完全访问
»忘记密码? »创建ACM Web帐号
文章内容:
Baidu
map