第二部分:第7章Ⅵ sual Prolog编程 7.1.4作用域访问 Visual Prolog6允许这些跨越类的代码数据引用,称为访问作用域。可以 用一个例子来理解,假设在名为 class1的类中定义了一个名为pred1的谓词 (使用VDE在另一个文件中写出),我们在另一个文件c|ass2中调用另一个名 为pred2的谓词,下面就是如何在pred2的子句体中调用pred1的例子: pred3:- pred2 classl: pred1 , pred 1 is not known in this file. %/ It is defined in some other file %o Hence a class qualifier is needed pred3, 2004.11.3 A|程序设计 16
2004.11.3 AI程序设计 16 第二部分:第7章 Visual Prolog编程 7.1.4 作用域访问 Visual Prolog 6允许这些跨越类的代码数据引用,称为访问作用域。可以 用一个例子来理解,假设在名为class1 的类中定义了一个名为pred1 的谓词 (使用VDE 在另一个文件中写出),我们在另一个文件class2中调用另一个名 为 pred2 的谓词,下面就是如何在pred2的子句体中调用pred1的例子: pred3:- ... !. pred2:- class1::pred1, % pred1 is not known in this file. % It is defined in some other file, % Hence a class qualifier is needed pred3,
第二部分:第7章Ⅵ sual Prolog编程 7.1.4作用域访问 在上述例子中,可以看到ped2的子句体调用ped1和pred3这两个谓词,因 为pred1在另一文件 class1中被定义,因此将cas1和“::“放在pred1的前面, 这被称为是类的限定符。 但是谓词pred3和ped2一样,在相同的文件中被定义,因此没有必要在谓词 前加上“cass2∷"来调用pred3。 这种行为在专业上这样解释:pred3的访问作用域蕴含于pred2中,因此没有 必要澄清pred3和pred2一样来自于同一个类,编译程序会在定义 class:2的范 围内自动寻找pred3的定义。 某一特定类定义的作用域范围被限制在某一特定文件中声明的类中(代码写在 关键字 implement和 end implement之间),在其中定义的谓词可以不用类 名限定符和“∷:"符号作为前缀相互调用。 2004.11.3 A|程序设计 17
2004.11.3 AI程序设计 17 第二部分:第7章 Visual Prolog编程 7.1.4 作用域访问 在上述例子中,可以看到pred2的子句体调用pred1和pred3这两个谓词,因 为pred1在另一文件class1中被定义,因此将class1和“::”放在pred1的前面, 这被称为是类的限定符。 但是谓词pred3和pred2一样,在相同的文件中被定义,因此没有必要在谓词 前加上“class2::”来调用pred3。 这种行为在专业上这样解释:pred3的访问作用域蕴含于pred2中,因此没有 必要澄清pred3和pred2一样来自于同一个类,编译程序会在定义class2 的范 围内自动寻找pred3 的定义。 某一特定类定义的作用域范围被限制在某一特定文件中声明的类中(代码写在 关键字implement和end implement之间),在其中定义的谓词可以不用类 名限定符和“::”符号作为前缀相互调用
第二部分:第7章Ⅵ sual Prolog编程 7.1.4作用域访问 类的作用域范围可以通过使用open这个关键字予以扩充,这个关键字可以通知 编译程序调用在其它文件中定义的谓词、常量、论域名。如果作用域范围扩充 了的话,我们就不需要写类名限定符和 open class1 pred3 pred2 predl, Note: classl: : qualifier is not needed %o anymore, as the scope area %o is extended using the open keyword pred3, 2004.11.3 A|程序设计 18
2004.11.3 AI程序设计 18 第二部分:第7章 Visual Prolog编程 7.1.4 作用域访问 类的作用域范围可以通过使用open这个关键字予以扩充,这个关键字可以通知 编译程序调用在其它文件中定义的谓词、常量、论域名。如果作用域范围扩充 了的话,我们就不需要写类名限定符和“::”。 open class1 ... pred3:- ... !. pred2:- pred1, % Note: "class1::" qualifier is not needed % anymore, as the scope area % is extended using the 'open' keyword pred3,
第二部分:第7章Ⅵ sual Prolog编程 7.1.5面向对象 Visua| Prolog的当前版本是一个强大的面向对象语言, 如果需要的话,开发程序的整个代码会根据需要被放入合 适的类中。即使对这种语言的面向对象特性不感兴趣,它 也会自动进行。我们也会在本章给出的例子中发现这个特 性。即使我们完全不使用任何该类生成的对象,代码一样 会被插入到名为 family1的类中。我们将会直接使用这个 类中的谓词代码。 2004.11.3 A|程序设计 19
2004.11.3 AI程序设计 19 第二部分:第7章 Visual Prolog编程 7.1.5 面向对象 Visual Prolog的当前版本是一个强大的面向对象语言, 如果需要的话,开发程序的整个代码会根据需要被放入合 适的类中。即使对这种语言的面向对象特性不感兴趣,它 也会自动进行。我们也会在本章给出的例子中发现这个特 性。即使我们完全不使用任何该类生成的对象,代码一样 会被插入到名为 family1的类中。我们将会直接使用这个 类中的谓词代码
第二部分:第7章Ⅵ sual Prolog编程 7.1.6一个完整的例子:fami!y1pj6 让我们把所学的知识集合起来去写我们的第一个 sual Prolog6 的程序。这将包含在“ Prolog基础”一章中所涉及的相同的基本逻辑。 所有为本章所写的代码如下所示,并写入名为 family1po的文件中。 使用 Visual Prolog的VDE可完成代码的输入。本章所需要的更多文件 将由VDE自动生成和维护。如何一步步使用VDE开发程序的步骤将在 稍后做介绍。 2004.11.3 A|程序设计 20
2004.11.3 AI程序设计 20 第二部分:第7章 Visual Prolog编程 7.1.6 一个完整的例子:family1.prj6 让我们把所学的知识集合起来去写我们的第一个Visual Prolog 6 的程序。这将包含在“Prolog基础”一章中所涉及的相同的基本逻辑。 所有为本章所写的代码如下所示,并写入名为family1.pro的文件中。 使用Visual Prolog 的VDE可完成代码的输入。本章所需要的更多文件 将由VDE自动生成和维护。如何一步步使用VDE开发程序的步骤将在 稍后做介绍