6.7.1 Prolog
Prolog以逻辑为基础。程序员会声明对象及其关系,并了解与之相关的内容。Prolog系统通过内置的搜索和回溯机制来解释这些问题。例如,我们可以通过写字来告诉Prolog系统桌子和椅子是一种家具:
furniture(table). furniture(chair).
接下来,我们可以试着问Prolog,面包是家具吗?
| ?- furniture(bread).
答案是“否”。但是下面这个问题:
| ?- furniture(table).
答案是“是”。这种可以得到是或否结论的Prolog形式被称为predicate,当它被作为搜索关键字时,则被称为goal。
我们还可以使用变量,这些变量可以实例化(赋值)也可以不实例化;这种变量称为逻辑变量。逻辑变量的命名规则为大写字母或下划线( _ )开头作为标识。例如我们可以这样使用它们:
| ?- furniture(X).
这是在对逻辑变量X进行实例化。Prolog系统将会搜索可能的实例并响应:
X = table
然后,我们可以通过键入一个RETURN来停止搜索,也可以键入一个分号来继续(然后再键入RETURN)。后一种情况下Prolog系统要返回X的另一个实例。这样一个为已知因子寻找相匹配的逻辑变量实例的过程称之为推理(inference)。
并非每个例子都像上面列举的那么简单。例如,如下这样一个Prolog子句包含了古董家具的信息:
antique_furniture(Obj,Age) :- furniture(Obj), Age > 100.
这里我们看到有一个对象,是两个目标的结合:一个对象Obj和一个年份Age是属于古董家具对象的一部分,即如果它是一件家具,并且年份大于100年,则是一件古董家具。
Prolog系统中一个重要的数据结构是列表,列表长度不需要初始化。空列表用 []表示;[a]则是头部为a尾部为 []的列表;[a,b,c]是头部为a尾部为 [b,c]的列表。另一个有用的数据结构是复合值,其中是一组固定数量的数据组合在一个命名实体中。例如dog(“Fido”,brown)。其中的数据项可以是逻辑变量。