GOAL
likes(X,reading) and likes(X,swimming).
分析:目标有两个子目标。Prolog 试图从左到右逐一满足。在搜索过程中,likes(X,reading)
没有被满足之前,其 X 的值没有确定,此时称 X 为自由变量。当用 likes(ellen,reading)匹配
第一子目标后, X 被约束为 ellen 值,此时称 X 为约束变量。此后,对第二子目标
likes(X,swimming)进行匹配时,X 是约束变量。
2-1-4 事实数据库段
Visual prolog 程序是事实和规则的集合。在程序运行期间,对程序操纵的事实的更新、
改变、移动及增加、减少等,因此,属于动态库(dynamic database)或内部库(internal database)。
Visual prolog 包含了一个专门用来说明属于动态库的事实的部分,即FACTS 部分。
FACTS 的一般声明格式如下:
[GLOBAL] {FACTS | DATABASE}[- databasename]
[nocopy][{nondeterm|determ|single}] fact_1[([ArgsList_1])] ...
[nocopy][{single|determ|nondeterm}] fact_N[([ArgsList_N])]
...
其中,“{}”表示多选一,且必选一,“[]”表示可有可无,“*”表示任意多次重复(包
含 0 次)。
GLOBAL----表明事实部分是否是全局的。
nocopy----事实匹配时不进行复制。
nondeterm----默认情形是事实 fact_N 的任意多个实例可以存在(即不确定的)。
determ----任何时候,一个 fact_N 的实例不超过 1 个。
single----任何时候,事实 fact_N 的实例有且只能有一个。
fact_N----事实或谓词。
argsList_N----事实或谓词中的参数表。其形式为:
[ Domain_1 Name_1 [ , Domain_2 Name_2 ]* ]
例如:
FACTS
person(STRING Name, STRING Address, INTEGER Age)
determ counter(integer CounterValue)
single singleFact(STRING)
single my_font(font_list)
2-1-5 域段
用于声明任何 Visual Prolog 标准域以外的域。类似于 C 语言中的数据类型定义 typedef
的功能。
2-1-5-1 符号约定及说明
dom----领域名。
reference 表示允许有非约束变量作为输入参数。其声明的方法是在域声明右边加一关键
字 reference。例如:
DOMAINS
reflist = reference refint*