2004.11.3 AI程序设计 1
第 二 部分:第 4章 Visual Prolog概述
第 4章 Visual Prolog概述
? 在这一章, 将首先给出 Visual Prolog 6基本特性的一个简要介绍 。
然后通过实例, 较为详细地介绍 Visual Prolog 6的可视化开发环境
VDE,包括创建项目, 建立项目, 浏览项目, 开发项目, 调试项目等 。
2004.11.3 AI程序设计 2
第 二 部分:第 4章 Visual Prolog概述
第 4章 Visual Prolog概述
4.1 Visual Prolog 6概述
4.2 Visual Prolog 6基本特性
4.3 创建项目
4.4 建立项目
4.5 浏览项目
4.6 开发项目
4.7 调试项目
本章小结
习 题 四
2004.11.3 AI程序设计 3
第 二 部分:第 4章 Visual Prolog概述
4.1 Visual Prolog 6概述
? Visual Prolog 6是最新一代的 Visual Prolog逻辑程序设计语言, 是
Visual Prolog的 PDC和 Turbo Prolog的后继产品 。 Visual Prolog
6的目标是支持企业级的强调问题求解的复杂知识的程序设计 。
Visual Prolog 6的发布是 PDC历时 3年开发的结果 。
2004.11.3 AI程序设计 4
第 二 部分:第 4章 Visual Prolog概述
4.1 Visual Prolog 6概述
? 经过持续不断的努力和对用户需求的深入考察, Visual Prolog已经
增加了如下功能,
– 一个独特的对象系统
– 多线程机制
– Unicode支持
– 改进的 DLL支持
– 改进的函数支持
– 改进的异常处理
– 其他更多功能等
2004.11.3 AI程序设计 5
第 二 部分:第 4章 Visual Prolog概述
4.1 Visual Prolog 6概述
? 今天, Visual Prolog 6是一个功能非常强大的, 非常安全的程序设
计语言, 它以一致和一流的方式将许多编程范例结合在一起 。 Visual
Prolog是一个完备的程序设计环境, 它提供如下设施,
– 图形开发环境
– 编译器
– 连接器
– 调试器
2004.11.3 AI程序设计 6
第 二 部分:第 4章 Visual Prolog概述
4.1 Visual Prolog 6概述
? 开发环境已经得到极大的改善, 从而使编写程序更加简单, 对高级任
务可提供更好的帮助 。 它支持先进的客户 /服务器和多级解决方案 。
使用 Visual Prolog,我们就能在 Microsoft Windows平台建立企业
级的应用程序 。 Visual Prolog特别适应于处理复杂的知识问题 。
PDC已经通过实例证明了这一点, 它提供的一些成功的应用系统案例
有,
– 职员计划
– 医院预约登记
– 机场决策支持
– 航班决策支持
– 商店室内调度
2004.11.3 AI程序设计 7
第 二 部分:第 4章 Visual Prolog概述
4.1 Visual Prolog 6概述
? 上述所有这些系统全部是用 Visual Prolog写成的 。
? 通过使用功能强大的对象系统, 我们能够非常迅速地构筑一个应用,
同时受益于非常宽松的耦合环境 。 这将使我们能够缩短开发周期, 减
少维护费用 。
? PDC提供免费的非商业的个人版本, 从而为学习使用这个卓越的系统
提供了良机 。
2004.11.3 AI程序设计 8
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
? Visual Prolog 6是最新一代的 Visual Prolog 逻辑程序设计语言, 它
可以创建 Win 32平台的企业级应用程序 。
? Visual Prolog 6是基于 Prolog的强类型的面向对象程序设计语言 。
下面从语言特性, 图形化开发环境, 编译器, 链接器, 调试器等方面
简要予以介绍 。
2004.11.3 AI程序设计 9
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
4.2.1 语言特性
Visual Prolog 6语言的主要特性,
? 基于 Horn子句的逻辑程序设计语言
? 完全面向对象
? 对象谓词值 ( 委派 )
? 强类型
? 代数数据类型
? 模式匹配与合一
? 受控的不确定性机制
? 完全集成的事实数据库
? 自动的内存管理
? 支持与 C/C++的直接联接
? 支持对 Win32 API函数的直接访问
2004.11.3 AI程序设计 10
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
? 对象机制实现了系统和用户之间的松散耦合 。 对象只能通过接口来访
问, 接口与实现之间不过是松散耦合 。 类可以通过继承 ( 或不继承 )
其它类来实现接口 。
? 强大的类型检测, 无需指针算法和自动内存管理的结合真正地避免了
非法访问 。
? 无非法访问一直是 Visual Prolog的一个优势 。 正如 PDC的一位用户
所说:, 对于 Visual Prolog,那种错误不存在 。, Visual Prolog 6
毫无例外地继续保持这个优势 。 PDC的目标是:避免在必须调用外部
代码或建立指针算法时引起的非法访问 。
2004.11.3 AI程序设计 11
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
? 用非决定性搜索将符号数据类型, 事实数据库和模式匹配结合起来,
这样使得 Visual Prolog非常适合于处理复杂的结构化知识 。
? 除了谓词值和对象, 所有的 Visual Prolog数据都有一个人性化的可
读文本表示, 它可以被写入并返回到程序 。
2004.11.3 AI程序设计 12
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
4.2.2 图形化开发环境
Visual Prolog集成开发环境可以更方便快捷地建立, 测试和修改
Visual Prolog应用程序 。 它在开发大型项目时非常有用 。
– 项目窗口中的模块, 包括文件和资源的树型结构, 有助于将项目
打包, 从而给出了一个额外级别的抽象 。
– 文本编辑器可以方便地进行文本编辑, 浏览那些声明和实现 。
– 对话框编辑器为设计对话框提供了标准控件 。
– 菜单编辑器允许创建下拉式菜单和弹出式菜单 。
– 工具栏编辑器允许创建各种工具栏 。
– 图形编辑器可以方便地创建, 查看和编辑图标, 指针和小位图 。
– 建造工具支持插入所需的程序包和包含指令 。
– 浏览工具支持查找特定的实体,, go to definition”和, go to
declaration”。
2004.11.3 AI程序设计 13
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
4.2.3 编译器
Visual Prolog编译器是二十世纪八十年代的 Turbo Prolog 编译器的
后继产品, Turbo Prolog是第一个 Prolog编译器 。 自那时开始,
PDC就一直开发并改进这个编译器, 所以现在的 Visual Prolog编译
器是一个功能强大且高效的编译器, 它可以用来,
– 为产生可单独执行的程序或 DLL而创建目标文件
– 解决声明间的交叉引用
– 验证谓词模式
– 执行强类型检查
– 在构造器中验证事实初始化
– 进行谓词分解
2004.11.3 AI程序设计 14
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
4.2.4 链接器
Visual Prolog拥有一个功能强大的链接器,
– 产生 EXE可执行文件和 DLL文件
– 使用由最新的 Microsoft Visual C编译器产生的 LIB文件
2004.11.3 AI程序设计 15
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
4.2.5 调试器
Visual Prolog集成开发环境包含一个内建图形化调试器,
– 显示常见的调试器视图:内存, 堆栈, 变量
– 显示类和对象事实的值
– 进行单步跟进 ( Trace Into), 单步越进 ( Step Over), 等等
– 包括额外的调试步骤:单步跳出, 运行到 Prolog代码
– Fail和 Exit可视化等
2004.11.3 AI程序设计 16
第 二 部分:第 4章 Visual Prolog概述
4.3 创建项目
从这一节开始, 我们将给出一个可视化开发环境 VDE的综述 。 这个 VDE
是用来创建, 开发和维护 Visual Prolog项目的 。 简言之, 在一个项
目文件中, 我们将使用这个 VDE来完成如下任务,
? 创建 ( Creation) 项目:即用 VDE来创建一个项目 。 在项目创建期间,
可以选择该项目的一些重要特性, 如该项目是产生一个可执行文件还
是产生一个 DLL,是使用 GUI还是只使用文本方式等 。
? 建立 ( Building) 项目:即建立一个项目, 在 VDE中进行编译和连接
等 。
? 浏览 ( Browsing) 项目,VDE和编译器收集关于该项目的信息, 这
些信息以各种方式被用来进行实体的快速定位等 。
2004.11.3 AI程序设计 17
第 二 部分:第 4章 Visual Prolog概述
4.3 创建项目
? 开发 ( Development) 项目:在项目的开发和维护期间, VDE被用
来给项目添加源文件和 GUI实体, 删除源文件和 GUI实体, 以及编辑
源文件和 GUI实体 。
? 调试 ( Debugging) 项目,VDE还被用来调试项目 。 在程序运行期
间, 调试器可用来跟踪程序的执行, 探索程序的状态 。
本章最后, 我们将较为详细地回顾一下上述这些事件 。 值得注意的是:
我们将首先创建一个项目, 并将这个项目贯穿于全章 。
2004.11.3 AI程序设计 18
第 二 部分:第 4章 Visual Prolog概述
4.3 创建项目
首先, 我们创建
一个项目 。 在菜单
中选择 Project ->
New...,VDE将对
此做出响应, 出现
一个包含项目各种
特性的对话框, 如
图 4.1所示 。
图 4.1 项目设置选项对话框
2004.11.3 AI程序设计 19
第 二 部分:第 4章 Visual Prolog概述
4.3 创建项目
? 我们选择项目名为 tut01。 项目名亦作为将要产生的目标文件名 。 在
此例中, 目标文件是一个 exe文件, 故目标文件名将是 tut01.exe。
选择 UI策略为 GUI,即该程序是一个 GUI程序, 带有图形用户界面 。
? 基本目录 ( Base Directory) 是一切项目的, 基地, 。 为此, 我们
可以选择一个方便的目录位置 。 新项目将在基本目录的一个子目录中
进行创建, 按照缺省, 这个子目录名与项目名同名 。
2004.11.3 AI程序设计 20
第 二 部分:第 4章 Visual Prolog概述
4.3 创建项目
? 在系统中创建项目时, 常使用包前缀 ( Package Prefix) 。 关于包的
概念, 后面的章节还将详细解释 。 在此例中, 源程序文件将与其他人
共享前缀, 如果这个前缀不与其他前缀相冲突, 这是一个好的做法 。
此时, 暂不需要考虑其余的选项 。
? 现在, 按下创建 ( Create) 按钮, 创建该项目 。 VDE将显示出如图
4.2所示的情形 。
2004.11.3 AI程序设计 21
第 二 部分:第 4章 Visual Prolog概述
4.3 创建项目
图 4.2 项目创建过程
2004.11.3 AI程序设计 22
第 二 部分:第 4章 Visual Prolog概述
4.3 创建项目
? 左面的窗口是项目窗口 ( Project Window), 它包含项目中有关实
体的各种信息 。 这个窗口现在尚不包含大量的信息, 但当我们编译该
项目时, 各种信息就会被添加进来 。 我们将会较详细地分析在编译该
项目时这个窗口所包含的各种信息 。
? 左面或底部是消息窗口 ( Messages Window), 它将包含各种状态
信息和进展信息 。
2004.11.3 AI程序设计 23
第 二 部分:第 4章 Visual Prolog概述
4.4 建立项目
? 在我们做任何修改之前, 我们将建立该项目, 即编译和连接该项目 。
在建立 ( Build) 菜单中, 可以找到建立, 编译和执行项目的菜单命
令 。
? 如果选择执行 ( Execute) 命令, 则该项目首先将会执行建立操作,
这取决于执行程序的版本日期 。 因此, 可以直接选择执行命令 ( 或直
接按下 F9键 ) 。
? 如果你还没有对 Visual Prolog进行注册, 将会出现一个专门的屏幕
信息进行提醒 。 建议对 Visual Prolog进行注册, 也可以选择, 继
续, 。
2004.11.3 AI程序设计 24
第 二 部分:第 4章 Visual Prolog概述
4.4 建立项目
? 在消息窗口 ( Messages Window), VDE显示哪些文件被编译, 等
等 。
? 如果建立进程成功, 就像此例一样, 所创建的程序被执行 。 本例现在
的结果是只可以看见一个小的什么也不做的 GUI程序 。 值得注意的是,
这个程序看起来有点像 VDE本身 。 因为 VDE实际上就是一个 Visual
Prolog程序, 所以这一点并不是巧合 。
? 在本章后面, 我们还将看到, 如果在程序建立过程中编译器或连接器
检测到错误, 将会发生什么样的情形 。
2004.11.3 AI程序设计 25
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
? 现在, 我们将把目光转到项目窗口 ( Project Window) 中的项目树
( Project Tree), 并对其稍加解释 。 项目树本身是以标准的窗口树
控件进行显示的, 读者对此用法已经比较熟悉 。 在这里, 我们将集中
精力在该树的内容上 。 项目树的结构和内容如图 4.3所示 。
2004.11.3 AI程序设计 26
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
图 4.3 项目窗口中的项目树
2004.11.3 AI程序设计 27
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
? 图中顶部节点代表项目, 其余节点是项目目录 。
? 紧下面是逻辑节点 $(ProDir),它表示 Visual Prolog的安装目录 。 这
个目录包含来自 Visual Prolog系统的库和库代码 。
? 接下来的目录是任务窗口 TaskWindow,它是该项目目录的一个子目
录 。 这个目录包含产生任务窗口, 菜单, 工具栏及关于 ( about) 对
话框等所需要的全部代码 。
2004.11.3 AI程序设计 28
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
最后, 我们可以看到若干文件 。 Visual Prolog使用以下约定,
? *.ph文件是程序包的头文件 ( package headers) 。 一个程序包是
类和接口的一个集合, 程序包常被当作一个积木块使用 。
? *.pack文件是程序包 。 它们包含相应的,ph文件的实现或定义 。
? *.i文件包含一种接口 ( interface) 。
? *.cl文件包含一个类声明 ( class declaration) 。
? *.pro文件包含一个类实现 ( class implementation) 。
? 如果我们完全展开 tut01.cl节点, 其情形如图 4.4所示 。
2004.11.3 AI程序设计 29
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
图 4.4 项目树展开的内容
2004.11.3 AI程序设计 30
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
? 这个子目录表明, 文件 tut01.cl包含一个叫做 tut01的类, 这个类又
包含两个分别叫做 classinfo和 run的谓词 。 所谓, 谓词, 就是子例程,
但是在本章中我们将不对它们做深层次的探究 。
? 如果折叠起这个节点, 重新展开任务窗口 ( TaskWindow) 节点, 可
以看到如图 4.5所示的这样一个目录树 。
2004.11.3 AI程序设计 31
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
图 4.5 任务窗口项目树的
内容
2004.11.3 AI程序设计 32
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
新出现的几个类型的节点的含义如下,
– *.dlg 文件包含一个对话框 ( dialog) ;
– *.win文件包含一个窗口 ( window) ;
– *.mnu文件包含一个菜单 ( menu) ;
– *.cur文件包含一个光标 ( cursor) ;
– *.ico文件包含一个图标 ( icon) 。
继续考察后还可以发现,
– *.tb文件包含工具栏 ( toolbars) ;
– *.bmp文件包含位图 ( bitmaps) ;
– *.lib文件包含库 ( libraries) 。
2004.11.3 AI程序设计 33
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
? 如果右击一个节点, 一个关联菜单将出现, 菜单中包含有对这个特定
节点进行适当操作的有关命令 。
? 如果双击一个节点, 则相应的实体将调出对应的编辑器 。 所有源代码
文件都将在文本编辑器中进行编辑, 而窗口资源, 如对话框和菜单等
将在图形编辑器中进行编辑 。 后面我们将进一步考察图形编辑器和文
本编辑器 。
? 某些实体在项目树中出现两次, 这是因为它们既有一个声明, 又有一
个定义或实现 。 例如, tut01类中的谓词 run,如图 4.6所示 。
2004.11.3 AI程序设计 34
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
图 4.6 项目树展开后的
内容
2004.11.3 AI程序设计 35
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
? 试着双击每一个 run节点, 可以看到, 显示 run谓词的声明和定义的
两个编辑器分别被打开 。
? VDE还有其他的工具, 以浏览指定的实体, 但这些工具在此将不进行
讨论 。
2004.11.3 AI程序设计 36
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 现在试着对该项目做一修改 。 因为我们仍然未考虑如何用 Visual
Prolog进行编程, 所以我们将使这些改变尽量简单一些 。
? 我们开始故意引入一个错误, 因而就可以看到错误窗口 。 首先, 我们
在文件 tut01.pro中查找 run谓词子句 。 如果在项目树中双击这两个
run节点的后面的那个节点, 文本编辑器将被打开, 一个插字符号正
好位于该节点处, 如图 4.7所示 。
2004.11.3 AI程序设计 37
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.7 文本
编辑器窗口
2004.11.3 AI程序设计 38
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 试着插入一个 fail,如下面的代码所示 ( 注意 show后面的逗号 ) 。
clauses
run():-
TaskWindow = taskWindow_class::new(),
TaskWindow:show(),
fail,
? 我们试图再次建立该项目, 即直接按下 F9键 。 系统将保存和编译该文
件, 但由于我们引入了一个错误, 所以错误窗口被打开, 如图 4.8所
示 。
2004.11.3 AI程序设计 39
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.8 错误窗口
2004.11.3 AI程序设计 40
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 我们将考虑错误信息的实际含义 。 一旦双击错误消息, 就会发现, 编
辑器再次获得焦点, 插字符号准确地指向我们刚刚插入的 fail谓词 。
? 去掉 fail谓词, 复原该代码, 再次建立该项目 。
? 接着, 我们将试图在关于 ( about) 对话框中进行修改 。 这并不是一
个很明智的改变, 但它却能说明一些问题 。
? 首先, 我们将用对话框编辑器 ( Dialog Editor) 打开 About对话框 。
为此, 在项目树中双击该对话框 。 我们必须双击的节点如图 4.9所示 。
2004.11.3 AI程序设计 41
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.9 双击项目树中
About对话框
2004.11.3 AI程序设计 42
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 一旦双击了这个节点, 就会在对话框编辑器中看到该对话框和两个工
具栏, 如图 4.10所示 。
2004.11.3 AI程序设计 43
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.10 对话框编辑器
2004.11.3 AI程序设计 44
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 现在我们给这个对话框添加一个按钮 。 首先点击控件工具栏上的, 按
钮,, 然后在 AboutDialog对话框窗口中邻近项目图标的旁边点击一
下该对话框 。 结果, 一个窗口弹出来, 如图 4.11所示 。
2004.11.3 AI程序设计 45
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.11 按钮属性标志
对话框
2004.11.3 AI程序设计 46
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 我们改变这里的文本 ( Text) 为, Press Me”,这个文本将出现在按
钮上 。 我们还标记常量 ( Constant) 字段, 但这时 VDE已经选择该
常量为 idc_press_me。 该常量将在各种上下文中标识这个特定的控
件 。
? 当我们按下 Ok时, 该按钮将被插入到这个对话框之中, 结果情形如
图 4.12所示 。
2004.11.3 AI程序设计 47
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.12 将按钮插入 About对话框
2004.11.3 AI程序设计 48
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 现在,我们就可以做一些按钮被按下后要完成的事。为此,我们将
打开代码专家( Code Expert):右击该对话框,且选择代码专家
( Code Expert)。代码专家被打开后,我们可以看到光标正好位于
该按钮处(参见图 4.13)。
2004.11.3 AI程序设计 49
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.13 对话框与
窗口专家
2004.11.3 AI程序设计 50
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 在图 4.13所示的代码专家对话框中, 蓝色圆点表示这个控件未被处理 。
对于处理谓词, VDE建议使用名字 onControlPressMe。 右击该项,
选择添加 ( Add) 按钮, 以便将这个谓词添加到我们的代码中, 并且
将它与这个控件进行绑定 。
? 在我们选择添加 ( Add) 按钮之后, 代码专家将发生变化, 如图 4.14
所示 。
2004.11.3 AI程序设计 51
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.14 用对话框
与窗口专家添加处
理谓词
2004.11.3 AI程序设计 52
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 如果我们在代码专家中双击与该控件对应的那一行, 那么编辑器将被
打开, 并且定位在新插入的代码处, 如图 4.15所示 。
2004.11.3 AI程序设计 53
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.15 用文本编辑器修改谓词代码
2004.11.3 AI程序设计 54
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 当按钮按下时, 可以改变按钮上的文本 。 为此, 修改代码如下,
predicates
onControlPressMe, controlHandler,
clauses
onControlPressMe(_CtrlID,_CtrlType,CtrlWin,_CtrlInfo)
= handled(0),-vpi::winSetText(CtrlWin,"Pressed"),
注意,变量 CtrlWin在它出现的两个地方被修改为不以下划线开头的变
量 。 否则, 编译器将产生一个警告 。
2004.11.3 AI程序设计 55
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 现在, 试着再次建立和执行该程序 ( 即按下 F9键 ) 。 如果我们已经仔
细地遵循上述步骤, 到这里应该是成功的 。 在该程序中, 我们当然应
该可以打开 About对话框, 然后按下这个新按钮 。 其工作情形如图
4.16所示 。
2004.11.3 AI程序设计 56
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.16 About对话框按钮工作情形
2004.11.3 AI程序设计 57
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 开发环境包含一个调试器 。 有了调试器, 我们就可以跟踪程序的执行
过程, 检查程序的状态 。
? 在学会 Visual Prolog语言之前, 详细考察调试器没有太大的意义 。
但是, 在这里我们仍要简单解释一下这个调试器, 因为它对于理解语
言和使用语言是非常有用的 。
? 为了启动调试器, 在菜单中选择 Debug->Run,或者按下 F6键 。 如
果该项目不是最新的, 它将首先被建立, 然后才开始调试任务 。
注意, 通过选择菜单 Debug -> Stop Debugging (或者按下 Shift-F6
键 ),我们就可以在任何时间停止调试 。
2004.11.3 AI程序设计 58
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
调试开始时,VDE将首先装入调试信息,然后进入被调试的程序。程
序的执行过程在目标 goal执行之前一直处于停止状态。为了表示这种
情形,目标 goal在一个编辑器窗口中被打开,蓝色的箭头指向该目标
goal,如图 4.17所示。
2004.11.3 AI程序设计 59
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
图 4.17 调试程序
2004.11.3 AI程序设计 60
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 我们可以使用调试( Debug)菜单命令(如图 4.18所示)来单步执
行程序。
2004.11.3 AI程序设计 61
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
图 4.18 调试器单步执
行菜单命令
2004.11.3 AI程序设计 62
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 菜单命令 Step Into:将打开另一个编辑器和代码 mainExe::run,
箭头将指向这个代码的入口 。
? 在视图 ( View) 菜单中, 我们可以打开各种调试器窗口, 对此简要
作以下解释 。
? 运行堆栈 ( Run Stack) 窗口, 包含一个运行堆栈的描述, 如图
4.19所示 。
2004.11.3 AI程序设计 63
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
图 4.19 运行堆栈
2004.11.3 AI程序设计 64
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 图中 所能见到的信 息完全取决 于在 Tools -> Options..,->
Debugger选项中的设置 。
? 从原理上讲, 运行堆栈包含若干行, 与已经进行了的调用相一致 。 然
而, 优化 ( 即所谓的尾部调用优化 ) 的结果导致可能已经去掉了一些
条目 。
? 运行堆栈不仅可以显示调用关系, 还可以显示陷入点和回溯点的情况,
这些情况将在后续章节里进行更为详细的叙述 。
2004.11.3 AI程序设计 65
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 局部变量 ( Local Variables) 窗口:包含局部变量, 与运行堆栈窗
口中的选择相对应 。 一些变量可能尚未接收到值, 在这种情形将显示
一个下划线, 譬如上面的变量 originalraiser,如图 4.20所示 。
2004.11.3 AI程序设计 66
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
图 4.20 局部变量窗口
2004.11.3 AI程序设计 67
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 事实 ( Facts) 窗口:包含程序的全局状态信息 ( 参见图 4.21), 这
个状态存放在事实数据库中 。 事实数据库是 Visual Prolog独有的特
色, 将在后续章 节里叙述 。 我们也可以 从局部变量 ( Local
Variables) 窗口向事实 ( Facts) 窗口添加对象 。 这样, 就可以跟踪
那些感兴趣的目标的状态变化情况 。
2004.11.3 AI程序设计 68
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
图 4.21 事实窗口
2004.11.3 AI程序设计 69
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 断点 ( Breakpoints) 窗口:显示程序中当前的断点 ( 参见图 4.22) 。
假定我们已经设置好打开断点, 因而该窗口不为空 。 通过选择菜单
Debug -> Toggle Breakpoint (或按下 F12键 ),我们可以设置或
取消断点 。
2004.11.3 AI程序设计 70
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
图 4.22 断点窗口
2004.11.3 AI程序设计 71
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 其余的调试窗口属于低级调试, 此处将不进行讨论 。
2004.11.3 AI程序设计 72
第 二 部分:第 4章 Visual Prolog概述
本章小结
? 可视化开发环境 VDE是我们得以能够创建 ( create), 建立
( build), 维护 ( maintain), 及调试 ( debug) 一个项目的环境 。
它包含一系列工具, 编辑器和向导, 来帮助我们完成任务 。
2004.11.3 AI程序设计 73
第 二 部分:第 4章 Visual Prolog概述
习 题 四
1,详细分析 Visual Prolog与以前的 Prolog版本有何区别?
2,Visual Prolog 6有哪些基本特性?
3,Visual Prolog的可视化开发环境 VDE有何功用? 它包含哪些工具?
4,调试器有何功用? 为什么 VDE中要包含一个调试器?
5,通过上机实习, 熟悉利用可视化开发环境 VDE创建, 建立, 以及调试
一个项目的方法 。
第 二 部分:第 4章 Visual Prolog概述
第 4章 Visual Prolog概述
? 在这一章, 将首先给出 Visual Prolog 6基本特性的一个简要介绍 。
然后通过实例, 较为详细地介绍 Visual Prolog 6的可视化开发环境
VDE,包括创建项目, 建立项目, 浏览项目, 开发项目, 调试项目等 。
2004.11.3 AI程序设计 2
第 二 部分:第 4章 Visual Prolog概述
第 4章 Visual Prolog概述
4.1 Visual Prolog 6概述
4.2 Visual Prolog 6基本特性
4.3 创建项目
4.4 建立项目
4.5 浏览项目
4.6 开发项目
4.7 调试项目
本章小结
习 题 四
2004.11.3 AI程序设计 3
第 二 部分:第 4章 Visual Prolog概述
4.1 Visual Prolog 6概述
? Visual Prolog 6是最新一代的 Visual Prolog逻辑程序设计语言, 是
Visual Prolog的 PDC和 Turbo Prolog的后继产品 。 Visual Prolog
6的目标是支持企业级的强调问题求解的复杂知识的程序设计 。
Visual Prolog 6的发布是 PDC历时 3年开发的结果 。
2004.11.3 AI程序设计 4
第 二 部分:第 4章 Visual Prolog概述
4.1 Visual Prolog 6概述
? 经过持续不断的努力和对用户需求的深入考察, Visual Prolog已经
增加了如下功能,
– 一个独特的对象系统
– 多线程机制
– Unicode支持
– 改进的 DLL支持
– 改进的函数支持
– 改进的异常处理
– 其他更多功能等
2004.11.3 AI程序设计 5
第 二 部分:第 4章 Visual Prolog概述
4.1 Visual Prolog 6概述
? 今天, Visual Prolog 6是一个功能非常强大的, 非常安全的程序设
计语言, 它以一致和一流的方式将许多编程范例结合在一起 。 Visual
Prolog是一个完备的程序设计环境, 它提供如下设施,
– 图形开发环境
– 编译器
– 连接器
– 调试器
2004.11.3 AI程序设计 6
第 二 部分:第 4章 Visual Prolog概述
4.1 Visual Prolog 6概述
? 开发环境已经得到极大的改善, 从而使编写程序更加简单, 对高级任
务可提供更好的帮助 。 它支持先进的客户 /服务器和多级解决方案 。
使用 Visual Prolog,我们就能在 Microsoft Windows平台建立企业
级的应用程序 。 Visual Prolog特别适应于处理复杂的知识问题 。
PDC已经通过实例证明了这一点, 它提供的一些成功的应用系统案例
有,
– 职员计划
– 医院预约登记
– 机场决策支持
– 航班决策支持
– 商店室内调度
2004.11.3 AI程序设计 7
第 二 部分:第 4章 Visual Prolog概述
4.1 Visual Prolog 6概述
? 上述所有这些系统全部是用 Visual Prolog写成的 。
? 通过使用功能强大的对象系统, 我们能够非常迅速地构筑一个应用,
同时受益于非常宽松的耦合环境 。 这将使我们能够缩短开发周期, 减
少维护费用 。
? PDC提供免费的非商业的个人版本, 从而为学习使用这个卓越的系统
提供了良机 。
2004.11.3 AI程序设计 8
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
? Visual Prolog 6是最新一代的 Visual Prolog 逻辑程序设计语言, 它
可以创建 Win 32平台的企业级应用程序 。
? Visual Prolog 6是基于 Prolog的强类型的面向对象程序设计语言 。
下面从语言特性, 图形化开发环境, 编译器, 链接器, 调试器等方面
简要予以介绍 。
2004.11.3 AI程序设计 9
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
4.2.1 语言特性
Visual Prolog 6语言的主要特性,
? 基于 Horn子句的逻辑程序设计语言
? 完全面向对象
? 对象谓词值 ( 委派 )
? 强类型
? 代数数据类型
? 模式匹配与合一
? 受控的不确定性机制
? 完全集成的事实数据库
? 自动的内存管理
? 支持与 C/C++的直接联接
? 支持对 Win32 API函数的直接访问
2004.11.3 AI程序设计 10
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
? 对象机制实现了系统和用户之间的松散耦合 。 对象只能通过接口来访
问, 接口与实现之间不过是松散耦合 。 类可以通过继承 ( 或不继承 )
其它类来实现接口 。
? 强大的类型检测, 无需指针算法和自动内存管理的结合真正地避免了
非法访问 。
? 无非法访问一直是 Visual Prolog的一个优势 。 正如 PDC的一位用户
所说:, 对于 Visual Prolog,那种错误不存在 。, Visual Prolog 6
毫无例外地继续保持这个优势 。 PDC的目标是:避免在必须调用外部
代码或建立指针算法时引起的非法访问 。
2004.11.3 AI程序设计 11
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
? 用非决定性搜索将符号数据类型, 事实数据库和模式匹配结合起来,
这样使得 Visual Prolog非常适合于处理复杂的结构化知识 。
? 除了谓词值和对象, 所有的 Visual Prolog数据都有一个人性化的可
读文本表示, 它可以被写入并返回到程序 。
2004.11.3 AI程序设计 12
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
4.2.2 图形化开发环境
Visual Prolog集成开发环境可以更方便快捷地建立, 测试和修改
Visual Prolog应用程序 。 它在开发大型项目时非常有用 。
– 项目窗口中的模块, 包括文件和资源的树型结构, 有助于将项目
打包, 从而给出了一个额外级别的抽象 。
– 文本编辑器可以方便地进行文本编辑, 浏览那些声明和实现 。
– 对话框编辑器为设计对话框提供了标准控件 。
– 菜单编辑器允许创建下拉式菜单和弹出式菜单 。
– 工具栏编辑器允许创建各种工具栏 。
– 图形编辑器可以方便地创建, 查看和编辑图标, 指针和小位图 。
– 建造工具支持插入所需的程序包和包含指令 。
– 浏览工具支持查找特定的实体,, go to definition”和, go to
declaration”。
2004.11.3 AI程序设计 13
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
4.2.3 编译器
Visual Prolog编译器是二十世纪八十年代的 Turbo Prolog 编译器的
后继产品, Turbo Prolog是第一个 Prolog编译器 。 自那时开始,
PDC就一直开发并改进这个编译器, 所以现在的 Visual Prolog编译
器是一个功能强大且高效的编译器, 它可以用来,
– 为产生可单独执行的程序或 DLL而创建目标文件
– 解决声明间的交叉引用
– 验证谓词模式
– 执行强类型检查
– 在构造器中验证事实初始化
– 进行谓词分解
2004.11.3 AI程序设计 14
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
4.2.4 链接器
Visual Prolog拥有一个功能强大的链接器,
– 产生 EXE可执行文件和 DLL文件
– 使用由最新的 Microsoft Visual C编译器产生的 LIB文件
2004.11.3 AI程序设计 15
第 二 部分:第 4章 Visual Prolog概述
4.2 Visual Prolog 6基本特性
4.2.5 调试器
Visual Prolog集成开发环境包含一个内建图形化调试器,
– 显示常见的调试器视图:内存, 堆栈, 变量
– 显示类和对象事实的值
– 进行单步跟进 ( Trace Into), 单步越进 ( Step Over), 等等
– 包括额外的调试步骤:单步跳出, 运行到 Prolog代码
– Fail和 Exit可视化等
2004.11.3 AI程序设计 16
第 二 部分:第 4章 Visual Prolog概述
4.3 创建项目
从这一节开始, 我们将给出一个可视化开发环境 VDE的综述 。 这个 VDE
是用来创建, 开发和维护 Visual Prolog项目的 。 简言之, 在一个项
目文件中, 我们将使用这个 VDE来完成如下任务,
? 创建 ( Creation) 项目:即用 VDE来创建一个项目 。 在项目创建期间,
可以选择该项目的一些重要特性, 如该项目是产生一个可执行文件还
是产生一个 DLL,是使用 GUI还是只使用文本方式等 。
? 建立 ( Building) 项目:即建立一个项目, 在 VDE中进行编译和连接
等 。
? 浏览 ( Browsing) 项目,VDE和编译器收集关于该项目的信息, 这
些信息以各种方式被用来进行实体的快速定位等 。
2004.11.3 AI程序设计 17
第 二 部分:第 4章 Visual Prolog概述
4.3 创建项目
? 开发 ( Development) 项目:在项目的开发和维护期间, VDE被用
来给项目添加源文件和 GUI实体, 删除源文件和 GUI实体, 以及编辑
源文件和 GUI实体 。
? 调试 ( Debugging) 项目,VDE还被用来调试项目 。 在程序运行期
间, 调试器可用来跟踪程序的执行, 探索程序的状态 。
本章最后, 我们将较为详细地回顾一下上述这些事件 。 值得注意的是:
我们将首先创建一个项目, 并将这个项目贯穿于全章 。
2004.11.3 AI程序设计 18
第 二 部分:第 4章 Visual Prolog概述
4.3 创建项目
首先, 我们创建
一个项目 。 在菜单
中选择 Project ->
New...,VDE将对
此做出响应, 出现
一个包含项目各种
特性的对话框, 如
图 4.1所示 。
图 4.1 项目设置选项对话框
2004.11.3 AI程序设计 19
第 二 部分:第 4章 Visual Prolog概述
4.3 创建项目
? 我们选择项目名为 tut01。 项目名亦作为将要产生的目标文件名 。 在
此例中, 目标文件是一个 exe文件, 故目标文件名将是 tut01.exe。
选择 UI策略为 GUI,即该程序是一个 GUI程序, 带有图形用户界面 。
? 基本目录 ( Base Directory) 是一切项目的, 基地, 。 为此, 我们
可以选择一个方便的目录位置 。 新项目将在基本目录的一个子目录中
进行创建, 按照缺省, 这个子目录名与项目名同名 。
2004.11.3 AI程序设计 20
第 二 部分:第 4章 Visual Prolog概述
4.3 创建项目
? 在系统中创建项目时, 常使用包前缀 ( Package Prefix) 。 关于包的
概念, 后面的章节还将详细解释 。 在此例中, 源程序文件将与其他人
共享前缀, 如果这个前缀不与其他前缀相冲突, 这是一个好的做法 。
此时, 暂不需要考虑其余的选项 。
? 现在, 按下创建 ( Create) 按钮, 创建该项目 。 VDE将显示出如图
4.2所示的情形 。
2004.11.3 AI程序设计 21
第 二 部分:第 4章 Visual Prolog概述
4.3 创建项目
图 4.2 项目创建过程
2004.11.3 AI程序设计 22
第 二 部分:第 4章 Visual Prolog概述
4.3 创建项目
? 左面的窗口是项目窗口 ( Project Window), 它包含项目中有关实
体的各种信息 。 这个窗口现在尚不包含大量的信息, 但当我们编译该
项目时, 各种信息就会被添加进来 。 我们将会较详细地分析在编译该
项目时这个窗口所包含的各种信息 。
? 左面或底部是消息窗口 ( Messages Window), 它将包含各种状态
信息和进展信息 。
2004.11.3 AI程序设计 23
第 二 部分:第 4章 Visual Prolog概述
4.4 建立项目
? 在我们做任何修改之前, 我们将建立该项目, 即编译和连接该项目 。
在建立 ( Build) 菜单中, 可以找到建立, 编译和执行项目的菜单命
令 。
? 如果选择执行 ( Execute) 命令, 则该项目首先将会执行建立操作,
这取决于执行程序的版本日期 。 因此, 可以直接选择执行命令 ( 或直
接按下 F9键 ) 。
? 如果你还没有对 Visual Prolog进行注册, 将会出现一个专门的屏幕
信息进行提醒 。 建议对 Visual Prolog进行注册, 也可以选择, 继
续, 。
2004.11.3 AI程序设计 24
第 二 部分:第 4章 Visual Prolog概述
4.4 建立项目
? 在消息窗口 ( Messages Window), VDE显示哪些文件被编译, 等
等 。
? 如果建立进程成功, 就像此例一样, 所创建的程序被执行 。 本例现在
的结果是只可以看见一个小的什么也不做的 GUI程序 。 值得注意的是,
这个程序看起来有点像 VDE本身 。 因为 VDE实际上就是一个 Visual
Prolog程序, 所以这一点并不是巧合 。
? 在本章后面, 我们还将看到, 如果在程序建立过程中编译器或连接器
检测到错误, 将会发生什么样的情形 。
2004.11.3 AI程序设计 25
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
? 现在, 我们将把目光转到项目窗口 ( Project Window) 中的项目树
( Project Tree), 并对其稍加解释 。 项目树本身是以标准的窗口树
控件进行显示的, 读者对此用法已经比较熟悉 。 在这里, 我们将集中
精力在该树的内容上 。 项目树的结构和内容如图 4.3所示 。
2004.11.3 AI程序设计 26
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
图 4.3 项目窗口中的项目树
2004.11.3 AI程序设计 27
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
? 图中顶部节点代表项目, 其余节点是项目目录 。
? 紧下面是逻辑节点 $(ProDir),它表示 Visual Prolog的安装目录 。 这
个目录包含来自 Visual Prolog系统的库和库代码 。
? 接下来的目录是任务窗口 TaskWindow,它是该项目目录的一个子目
录 。 这个目录包含产生任务窗口, 菜单, 工具栏及关于 ( about) 对
话框等所需要的全部代码 。
2004.11.3 AI程序设计 28
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
最后, 我们可以看到若干文件 。 Visual Prolog使用以下约定,
? *.ph文件是程序包的头文件 ( package headers) 。 一个程序包是
类和接口的一个集合, 程序包常被当作一个积木块使用 。
? *.pack文件是程序包 。 它们包含相应的,ph文件的实现或定义 。
? *.i文件包含一种接口 ( interface) 。
? *.cl文件包含一个类声明 ( class declaration) 。
? *.pro文件包含一个类实现 ( class implementation) 。
? 如果我们完全展开 tut01.cl节点, 其情形如图 4.4所示 。
2004.11.3 AI程序设计 29
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
图 4.4 项目树展开的内容
2004.11.3 AI程序设计 30
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
? 这个子目录表明, 文件 tut01.cl包含一个叫做 tut01的类, 这个类又
包含两个分别叫做 classinfo和 run的谓词 。 所谓, 谓词, 就是子例程,
但是在本章中我们将不对它们做深层次的探究 。
? 如果折叠起这个节点, 重新展开任务窗口 ( TaskWindow) 节点, 可
以看到如图 4.5所示的这样一个目录树 。
2004.11.3 AI程序设计 31
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
图 4.5 任务窗口项目树的
内容
2004.11.3 AI程序设计 32
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
新出现的几个类型的节点的含义如下,
– *.dlg 文件包含一个对话框 ( dialog) ;
– *.win文件包含一个窗口 ( window) ;
– *.mnu文件包含一个菜单 ( menu) ;
– *.cur文件包含一个光标 ( cursor) ;
– *.ico文件包含一个图标 ( icon) 。
继续考察后还可以发现,
– *.tb文件包含工具栏 ( toolbars) ;
– *.bmp文件包含位图 ( bitmaps) ;
– *.lib文件包含库 ( libraries) 。
2004.11.3 AI程序设计 33
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
? 如果右击一个节点, 一个关联菜单将出现, 菜单中包含有对这个特定
节点进行适当操作的有关命令 。
? 如果双击一个节点, 则相应的实体将调出对应的编辑器 。 所有源代码
文件都将在文本编辑器中进行编辑, 而窗口资源, 如对话框和菜单等
将在图形编辑器中进行编辑 。 后面我们将进一步考察图形编辑器和文
本编辑器 。
? 某些实体在项目树中出现两次, 这是因为它们既有一个声明, 又有一
个定义或实现 。 例如, tut01类中的谓词 run,如图 4.6所示 。
2004.11.3 AI程序设计 34
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
图 4.6 项目树展开后的
内容
2004.11.3 AI程序设计 35
第 二 部分:第 4章 Visual Prolog概述
4.5 浏览项目
? 试着双击每一个 run节点, 可以看到, 显示 run谓词的声明和定义的
两个编辑器分别被打开 。
? VDE还有其他的工具, 以浏览指定的实体, 但这些工具在此将不进行
讨论 。
2004.11.3 AI程序设计 36
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 现在试着对该项目做一修改 。 因为我们仍然未考虑如何用 Visual
Prolog进行编程, 所以我们将使这些改变尽量简单一些 。
? 我们开始故意引入一个错误, 因而就可以看到错误窗口 。 首先, 我们
在文件 tut01.pro中查找 run谓词子句 。 如果在项目树中双击这两个
run节点的后面的那个节点, 文本编辑器将被打开, 一个插字符号正
好位于该节点处, 如图 4.7所示 。
2004.11.3 AI程序设计 37
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.7 文本
编辑器窗口
2004.11.3 AI程序设计 38
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 试着插入一个 fail,如下面的代码所示 ( 注意 show后面的逗号 ) 。
clauses
run():-
TaskWindow = taskWindow_class::new(),
TaskWindow:show(),
fail,
? 我们试图再次建立该项目, 即直接按下 F9键 。 系统将保存和编译该文
件, 但由于我们引入了一个错误, 所以错误窗口被打开, 如图 4.8所
示 。
2004.11.3 AI程序设计 39
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.8 错误窗口
2004.11.3 AI程序设计 40
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 我们将考虑错误信息的实际含义 。 一旦双击错误消息, 就会发现, 编
辑器再次获得焦点, 插字符号准确地指向我们刚刚插入的 fail谓词 。
? 去掉 fail谓词, 复原该代码, 再次建立该项目 。
? 接着, 我们将试图在关于 ( about) 对话框中进行修改 。 这并不是一
个很明智的改变, 但它却能说明一些问题 。
? 首先, 我们将用对话框编辑器 ( Dialog Editor) 打开 About对话框 。
为此, 在项目树中双击该对话框 。 我们必须双击的节点如图 4.9所示 。
2004.11.3 AI程序设计 41
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.9 双击项目树中
About对话框
2004.11.3 AI程序设计 42
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 一旦双击了这个节点, 就会在对话框编辑器中看到该对话框和两个工
具栏, 如图 4.10所示 。
2004.11.3 AI程序设计 43
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.10 对话框编辑器
2004.11.3 AI程序设计 44
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 现在我们给这个对话框添加一个按钮 。 首先点击控件工具栏上的, 按
钮,, 然后在 AboutDialog对话框窗口中邻近项目图标的旁边点击一
下该对话框 。 结果, 一个窗口弹出来, 如图 4.11所示 。
2004.11.3 AI程序设计 45
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.11 按钮属性标志
对话框
2004.11.3 AI程序设计 46
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 我们改变这里的文本 ( Text) 为, Press Me”,这个文本将出现在按
钮上 。 我们还标记常量 ( Constant) 字段, 但这时 VDE已经选择该
常量为 idc_press_me。 该常量将在各种上下文中标识这个特定的控
件 。
? 当我们按下 Ok时, 该按钮将被插入到这个对话框之中, 结果情形如
图 4.12所示 。
2004.11.3 AI程序设计 47
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.12 将按钮插入 About对话框
2004.11.3 AI程序设计 48
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 现在,我们就可以做一些按钮被按下后要完成的事。为此,我们将
打开代码专家( Code Expert):右击该对话框,且选择代码专家
( Code Expert)。代码专家被打开后,我们可以看到光标正好位于
该按钮处(参见图 4.13)。
2004.11.3 AI程序设计 49
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.13 对话框与
窗口专家
2004.11.3 AI程序设计 50
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 在图 4.13所示的代码专家对话框中, 蓝色圆点表示这个控件未被处理 。
对于处理谓词, VDE建议使用名字 onControlPressMe。 右击该项,
选择添加 ( Add) 按钮, 以便将这个谓词添加到我们的代码中, 并且
将它与这个控件进行绑定 。
? 在我们选择添加 ( Add) 按钮之后, 代码专家将发生变化, 如图 4.14
所示 。
2004.11.3 AI程序设计 51
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.14 用对话框
与窗口专家添加处
理谓词
2004.11.3 AI程序设计 52
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 如果我们在代码专家中双击与该控件对应的那一行, 那么编辑器将被
打开, 并且定位在新插入的代码处, 如图 4.15所示 。
2004.11.3 AI程序设计 53
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.15 用文本编辑器修改谓词代码
2004.11.3 AI程序设计 54
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 当按钮按下时, 可以改变按钮上的文本 。 为此, 修改代码如下,
predicates
onControlPressMe, controlHandler,
clauses
onControlPressMe(_CtrlID,_CtrlType,CtrlWin,_CtrlInfo)
= handled(0),-vpi::winSetText(CtrlWin,"Pressed"),
注意,变量 CtrlWin在它出现的两个地方被修改为不以下划线开头的变
量 。 否则, 编译器将产生一个警告 。
2004.11.3 AI程序设计 55
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
? 现在, 试着再次建立和执行该程序 ( 即按下 F9键 ) 。 如果我们已经仔
细地遵循上述步骤, 到这里应该是成功的 。 在该程序中, 我们当然应
该可以打开 About对话框, 然后按下这个新按钮 。 其工作情形如图
4.16所示 。
2004.11.3 AI程序设计 56
第 二 部分:第 4章 Visual Prolog概述
4.6 开发项目
图 4.16 About对话框按钮工作情形
2004.11.3 AI程序设计 57
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 开发环境包含一个调试器 。 有了调试器, 我们就可以跟踪程序的执行
过程, 检查程序的状态 。
? 在学会 Visual Prolog语言之前, 详细考察调试器没有太大的意义 。
但是, 在这里我们仍要简单解释一下这个调试器, 因为它对于理解语
言和使用语言是非常有用的 。
? 为了启动调试器, 在菜单中选择 Debug->Run,或者按下 F6键 。 如
果该项目不是最新的, 它将首先被建立, 然后才开始调试任务 。
注意, 通过选择菜单 Debug -> Stop Debugging (或者按下 Shift-F6
键 ),我们就可以在任何时间停止调试 。
2004.11.3 AI程序设计 58
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
调试开始时,VDE将首先装入调试信息,然后进入被调试的程序。程
序的执行过程在目标 goal执行之前一直处于停止状态。为了表示这种
情形,目标 goal在一个编辑器窗口中被打开,蓝色的箭头指向该目标
goal,如图 4.17所示。
2004.11.3 AI程序设计 59
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
图 4.17 调试程序
2004.11.3 AI程序设计 60
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 我们可以使用调试( Debug)菜单命令(如图 4.18所示)来单步执
行程序。
2004.11.3 AI程序设计 61
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
图 4.18 调试器单步执
行菜单命令
2004.11.3 AI程序设计 62
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 菜单命令 Step Into:将打开另一个编辑器和代码 mainExe::run,
箭头将指向这个代码的入口 。
? 在视图 ( View) 菜单中, 我们可以打开各种调试器窗口, 对此简要
作以下解释 。
? 运行堆栈 ( Run Stack) 窗口, 包含一个运行堆栈的描述, 如图
4.19所示 。
2004.11.3 AI程序设计 63
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
图 4.19 运行堆栈
2004.11.3 AI程序设计 64
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 图中 所能见到的信 息完全取决 于在 Tools -> Options..,->
Debugger选项中的设置 。
? 从原理上讲, 运行堆栈包含若干行, 与已经进行了的调用相一致 。 然
而, 优化 ( 即所谓的尾部调用优化 ) 的结果导致可能已经去掉了一些
条目 。
? 运行堆栈不仅可以显示调用关系, 还可以显示陷入点和回溯点的情况,
这些情况将在后续章节里进行更为详细的叙述 。
2004.11.3 AI程序设计 65
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 局部变量 ( Local Variables) 窗口:包含局部变量, 与运行堆栈窗
口中的选择相对应 。 一些变量可能尚未接收到值, 在这种情形将显示
一个下划线, 譬如上面的变量 originalraiser,如图 4.20所示 。
2004.11.3 AI程序设计 66
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
图 4.20 局部变量窗口
2004.11.3 AI程序设计 67
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 事实 ( Facts) 窗口:包含程序的全局状态信息 ( 参见图 4.21), 这
个状态存放在事实数据库中 。 事实数据库是 Visual Prolog独有的特
色, 将在后续章 节里叙述 。 我们也可以 从局部变量 ( Local
Variables) 窗口向事实 ( Facts) 窗口添加对象 。 这样, 就可以跟踪
那些感兴趣的目标的状态变化情况 。
2004.11.3 AI程序设计 68
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
图 4.21 事实窗口
2004.11.3 AI程序设计 69
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 断点 ( Breakpoints) 窗口:显示程序中当前的断点 ( 参见图 4.22) 。
假定我们已经设置好打开断点, 因而该窗口不为空 。 通过选择菜单
Debug -> Toggle Breakpoint (或按下 F12键 ),我们可以设置或
取消断点 。
2004.11.3 AI程序设计 70
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
图 4.22 断点窗口
2004.11.3 AI程序设计 71
第 二 部分:第 4章 Visual Prolog概述
4.7 调试项目
? 其余的调试窗口属于低级调试, 此处将不进行讨论 。
2004.11.3 AI程序设计 72
第 二 部分:第 4章 Visual Prolog概述
本章小结
? 可视化开发环境 VDE是我们得以能够创建 ( create), 建立
( build), 维护 ( maintain), 及调试 ( debug) 一个项目的环境 。
它包含一系列工具, 编辑器和向导, 来帮助我们完成任务 。
2004.11.3 AI程序设计 73
第 二 部分:第 4章 Visual Prolog概述
习 题 四
1,详细分析 Visual Prolog与以前的 Prolog版本有何区别?
2,Visual Prolog 6有哪些基本特性?
3,Visual Prolog的可视化开发环境 VDE有何功用? 它包含哪些工具?
4,调试器有何功用? 为什么 VDE中要包含一个调试器?
5,通过上机实习, 熟悉利用可视化开发环境 VDE创建, 建立, 以及调试
一个项目的方法 。