第二部分:第7章Ⅵ sual Prolog编程 第7章 Visual prolog编程 本章介绍基于Ⅵ visual Prolog编程方面的知识, 主要内容包括sua| Prolog基础、 Visual Prolog的GUI编程、 Visual prolog的逻辑层、 Visua| Prologi的数据层。 2004.11.3 A|程序设计
2004.11.3 AI程序设计 1 第二部分:第7章 Visual Prolog编程 第7章 Visual Prolog编程 本章介绍基于Visual Prolog编程方面的知识, 主 要 内 容 包 括 Visual Prolog 基 础 、 Visual Prolog的GUI编程、Visual Prolog的逻辑层、 Visual Prolog的数据层
第二部分:第7章Ⅵ sual Prolog编程 第7章 Visual prolog编程 71 Visua| Prolog基础 72 Visua| Prolog的叫U|编程 7.3sua| Prolog的逻辑层 74 Visual prolog.的数据层 本章小结与习题 2004.11.3 A|程序设计
2004.11.3 AI程序设计 2 第二部分:第7章 Visual Prolog编程 第7章 Visual Prolog编程 7.1 Visual Prolog基础 7.2 Visual Prolog的GUI编程 7.3 Visual Prolog的逻辑层 7.4 Visual Prolog的数据层 本章小结与习题
第二部分:第7章Ⅵ sual Prolog编程 7.1 Visua| Prolog基础 传统的 Prolog与 Visual prolog6之间的差别主要体现在如下几个方面: 1)程序结构 很明显,传统 Prolog中所使用的结构与Ⅵ sual prolog6中使用的结构,在理 解的难易程度方面不同。主要包括如何规划来自定义( definitions)的声明 ( declarations),以及如何简要地说明程序必须使用指定关键字 ( keywords)进行查找的主目标Goal 2)文件考虑 Visual prolog6提供了各种工具,以便将程序结构组织成不同类型的文件。 3)作用域访问 Visual Prolog6可以挑选在其他模块中通过使用称为作用域标识( Scope identification)的概念而开发出来的功能。 4)面向对象 Visual Prolog6程序可以编写成面问对象的程序,使用标准的面向对象特性。 2004.11.3 A|程序设计
2004.11.3 AI程序设计 3 第二部分:第7章 Visual Prolog编程 7.1 Visual Prolog基础 传统的Prolog与Visual Prolog 6之间的差别主要体现在如下几个方面: 1)程序结构 很明显,传统Prolog中所使用的结构与Visual Prolog 6中使用的结构,在理 解的难易程度方面不同。主要包括如何规划来自定义(definitions)的声明 (declarations),以及如何简要地说明程序必须使用指定关键字 (keywords)进行查找的主目标Goal。 2)文件考虑 Visual Prolog 6提供了各种工具,以便将程序结构组织成不同类型的文件。 3)作用域访问 Visual Prolog 6可以挑选在其他模块中通过使用称为作用域标识(Scope identification)的概念而开发出来的功能。 4)面向对象 Visual Prolog 6程序可以编写成面向对象的程序,使用标准的面向对象特性
第二部分:第7章Ⅵ sual Prolog编程 7.1 Visua| Prolog基础 7.1.1程序结构 7.1.2目标Goa 7.1.3文件考虑 7.1.4作用域访问 7.1.5面向对象 7.1.6一个完整的例子: family1.pj6 7.1.7程序的取舍 7.1.8小结 2004.11.3 A|程序设计
2004.11.3 AI程序设计 4 第二部分:第7章 Visual Prolog编程 7.1 Visual Prolog基础 7.1.1 程序结构 7.1.2 目标Goal 7.1.3 文件考虑 7.1.4 作用域访问 7.1.5 面向对象 7.1.6 一个完整的例子:family1.prj6 7.1.7 程序的取舍 7.1.8 小结
第二部分:第7章Ⅵ sual Prolog编程 7.1.1程序结构 Visual Prolog的程序,从结构上讲,主要包括若干个段,即论 域段、谓词段、子句段、目标段等。 Visual Prolog作为强类型的 编译型语言,通常用论域段和谓词段来给出有关的声明或定义 2004.11.3 A|程序设计
2004.11.3 AI程序设计 5 第二部分:第7章 Visual Prolog编程 7.1.1 程序结构 Visual Prolog的程序,从结构上讲,主要包括若干个段,即论 域段、谓词段、子句段、目标段等。Visual Prolog作为强类型的 编译型语言,通常用论域段和谓词段来给出有关的声明或定义
第二部分:第7章Ⅵ sual Prolog编程 7.1.1.1声明与定义 声明( Declaration)与定义( Definition)有着不同的含义。 在 Prolog中,当需要使用一个谓词的时候,就可以直接使用,无需事 先向 Prolog推理机做任何的通告。例如,在前面的例子中, grandFather谓词的子句就是利用传统的 Prolog的谓词头和谓词体结构 直接写下来的。我们不用在代码中再告知推理机这个谓词结构是后面需 要使用的。 类似地,当在传统的 Prolog中使用一个复合论域时,无须首先告诫 Prolog推理机关于使用该论域有何意图。只要感到需要,就可以直接使 用一个论域。 然而,在 Visual Prolog6中,在编写一个谓词的子句体代码之前, 我们必须首先对编译器声明这样一个谓词的存在。类似地,在使用任何 论域之前,也必须先进行声明,以便将这些论域的存在告知编译器 2004.11.3 A|程序设计 6
2004.11.3 AI程序设计 6 第二部分:第7章 Visual Prolog编程 7.1.1.1 声明与定义 声明(Declaration)与定义(Definition)有着不同的含义。 在Prolog中,当需要使用一个谓词的时候,就可以直接使用,无需事 先 向 Prolog 推 理 机 做 任 何 的 通 告 。 例 如 , 在 前 面 的 例 子 中 , grandFather谓词的子句就是利用传统的Prolog的谓词头和谓词体结构 直接写下来的。我们不用在代码中再告知推理机这个谓词结构是后面需 要使用的。 类似地,当在传统的Prolog中使用一个复合论域时,无须首先告诫 Prolog推理机关于使用该论域有何意图。只要感到需要,就可以直接使 用一个论域。 然而,在Visual Prolog 6中,在编写一个谓词的子句体代码之前, 我们必须首先对编译器声明这样一个谓词的存在。类似地,在使用任何 论域之前,也必须先进行声明,以便将这些论域的存在告知编译器
第二部分:第7章Ⅵ sual Prolog编程 7.1.1.1声明与定义 在 Visua| Prolog6中需要这种预先告知功能的原因本质上是为了保 证将运行时间异常( running exceptions)尽可能地转变为编译时间错 误( compile time errors)。 对于“运行时间异常”,我们指的是只在运行所编译的程序期间出现 的问题。例如,如果我们想使用一个整数作为一个函数的参数,但是却 错误地使用了实数,这就会成为一个运行错误(这大都出现在使用其他 编译器的程序中,但不是在 Visual Prolog6中),程序就会因此而失败。 当声明已定义的谓词和论域时,这类位置语法,即哪一个参变量属于 哪一个论域,就会对编译器起作用。因此,当 sual Prolog6执行编 译时,它将比较彻底的检查程序,以发现诸如此类的语法错误及其它错 误 2004.11.3 A|程序设计
2004.11.3 AI程序设计 7 第二部分:第7章 Visual Prolog编程 7.1.1.1 声明与定义 在Visual Prolog 6中需要这种预先告知功能的原因本质上是为了保 证将运行时间异常(running exceptions)尽可能地转变为编译时间错 误(compile time errors)。 对于“运行时间异常” ,我们指的是只在运行所编译的程序期间出现 的问题。例如,如果我们想使用一个整数作为一个函数的参数,但是却 错误地使用了实数,这就会成为一个运行错误(这大都出现在使用其他 编译器的程序中,但不是在Visual Prolog 6中),程序就会因此而失败。 当声明已定义的谓词和论域时,这类位置语法,即哪一个参变量属于 哪一个论域,就会对编译器起作用。因此,当Visual Prolog 6 执行编 译时,它将比较彻底的检查程序,以发现诸如此类的语法错误及其它错 误
第二部分:第7章Ⅵ sual Prolog编程 7.1.1.1声明与定义 由于Ⅴ isual Prolog6的这些特性,整个程序的效率因此提高了 程序员不必等到程序实际执行时才发现错误。事实上,对于实际编写 程序的人,将体会到这大大地节约了时间。通常,运行时导致发生运 行时间异常的条件如此难以捉摸,以致于错误可能会在很多年后才被 发现,或者会在许多特别重要的情况或令人尴尬的场合表现出来。 所有这些表明,编码中存在的论域和谓词要在定义前给出合适的声 明,以给编译器详尽的指示。 2004.11.3 A|程序设计 8
2004.11.3 AI程序设计 8 第二部分:第7章 Visual Prolog编程 7.1.1.1 声明与定义 由于Visual Prolog 6 的这些特性,整个程序的效率因此提高了。 程序员不必等到程序实际执行时才发现错误。事实上,对于实际编写 程序的人,将体会到这大大地节约了时间。通常,运行时导致发生运 行时间异常的条件如此难以捉摸,以致于错误可能会在很多年后才被 发现,或者会在许多特别重要的情况或令人尴尬的场合表现出来。 所有这些表明,编码中存在的论域和谓词要在定义前给出合适的声 明,以给编译器详尽的指示
第二部分:第7章Ⅵ sual Prolog编程 7.1.1.2关键字 一个 Visual Prolog6的程序包括一组被标点分为不同部分的代码, 由特定的关键字告诉编译程序所要生成的类型。例如,关键字可以将谓 词和论域的定义和声明区分开。通常,每一部分由一关键字开始,在每 部分结束时,一般没有关键字指示。新的关键字的出现表明前一部分 的结束和下一部分的开始。 对这一规则的例外是关键字“ implement"和“ end implement", 在这两个关键字中间的代码表示它们属于一个特殊的类。若有人不懂类 的概念,可以把它看作程序的一个模块或一个部分。 在本节中,我们将只介绍下述关键字。同样我们给出了这些关键字的 用途,具体的句法可以从文档资料中学到。 Visual prolog6中还有其它 一些关键字,可以在以后的内容和文档资料中学到 本章需要掌握的关键字在下面分别描述。 2004.11.3 A|程序设计
2004.11.3 AI程序设计 9 第二部分:第7章 Visual Prolog编程 7.1.1.2 关键字 一个Visual Prolog 6 的程序包括一组被标点分为不同部分的代码, 由特定的关键字告诉编译程序所要生成的类型。例如,关键字可以将谓 词和论域的定义和声明区分开。通常,每一部分由一关键字开始,在每 一部分结束时,一般没有关键字指示。新的关键字的出现表明前一部分 的结束和下一部分的开始。 对这一规则的例外是关键字“implement”和“end implement”, 在这两个关键字中间的代码表示它们属于一个特殊的类。若有人不懂类 的概念,可以把它看作程序的一个模块或一个部分。 在本节中,我们将只介绍下述关键字。同样我们给出了这些关键字的 用途,具体的句法可以从文档资料中学到。Visual Prolog 6 中还有其它 一些关键字,可以在以后的内容和文档资料中学到。 本章需要掌握的关键字在下面分别描述
第二部分:第7章Ⅵ sual Prolog编程 7.1.1.2关键字 Implement/Aend implement 在这里讨论的所有关键字中,这是惟一成对存在的。 Visua| Prolog6把出现在 这两个关键字之间的代码看成属于一个类。这个类名必须在“ implement"这个 关键字后给出。 Open 这个关键字用来扩展类作用域的可见性,它被用在 implement关键字之后 Constants 这个关键字用来表明一部分经常在程序中被使用的代码。例如,如果字符串 “ PDC Prolog"“在程序中多次出现,那么就可以定义一个它的缩写: constants pdc="PDC Prolog 注意,常量的定义以句号结束。与 Prolog中的变量不同,常量应该以小写字母开 头 2004.11.3 A|程序设计 10
2004.11.3 AI程序设计 10 第二部分:第7章 Visual Prolog编程 7.1.1.2 关键字 Implement和end implement 在这里讨论的所有关键字中,这是惟一成对存在的。Visual Prolog 6 把出现在 这两个关键字之间的代码看成属于一个类。这个类名必须在“implement”这个 关键字后给出。 Open 这个关键字用来扩展类作用域的可见性,它被用在implement关键字之后。 Constants 这个关键字用来表明一部分经常在程序中被使用的代码。例如,如果字符串 “PDC Prolog”在程序中多次出现,那么就可以定义一个它的缩写: constants pdc="PDC Prolog". 注意,常量的定义以句号结束。与Prolog中的变量不同,常量应该以小写字母开 头