9.9.3 Prolog语言的句法 Prolog语言的数据对象叫做项。-个项是-个常量、-个变量或一个复合项。 常量包括整数,如0,1,99,和原子,如a,sentence,noun-phrase,=,[],'Algol-68',→等等。常量用来指明确定的基本对象。 变量的第一个字符必须是一个英文大写字母,如X,Value,Al等。一个变量用来表示某个特指的未确定对象。 复合项是一种结构化的数据对象。-个复合项由-个函子和若干变元组成。一个函子则由其名字和变元数来描述。例如函子名为point、变元数为3的一个复合项可记作: point(X,Y,Z) 你可以把函子看作是-个记录类型,把复合项的变元看作是-个记录中的域。复合项通常可以用树来表示。例如项 S (np (john), vp (v (likes), np (mary))) 可以表示成图9.16所示的结构。在Prolog中复合项有时可以用中缀标记法来代替前缀标记法。例如前缀式: +(X,Y) ;(P,Q)<(X,Y) 可以分别用中绍式表示为: X+Y P;Q X<Y (X加Y) (P)或Q) (X小于Y)
此外原子可以看作是变元数为零的函子。 表是Prolog的一种重要的数据结构,其本质同Lisp语言中的表-样。一个表要么是一个原子"[]",表示空表:要么是一个函子名为"・"的复合项,它有两个变元,分别代表一个表的头和尾。因此由整数1,2,3组成的表具有如图9.17所示的结构。如果用Prolog的标准句法表示.它应当是 ・(1, ・ (2, ・ (3,[]))), 但通常我们用如下的简单标记如表示它: [1,2,3]。 当一个表的尾是一个变量时,可以用如下的方式来表示: [X|L] 或 [a,b| L]。 它们分别对应于图9.18(a)和(b))的结构。 下面是Prolog的一段简单程序,它包括 事实:likes(mary,food). likes(mary,wine). likes(john,wine). 规则:likes(john,X) :-likes(X,wine).
以上构成了Prolog的数据库,下面是用户输入的询问和机器的回答: ? -likes(mary,mony), no ? -1ikes(mary,wine). yes ? - likes(mary,X). (有什么东西是mary喜欢的?) X=food: X=wine; no (more answers) ? -1ikes(mary,X),likes(john,X). (有什么东西是mary和john都喜欢的?) X=wine; no (more answers) ? - likes(john,X). X=wine; X=mary; X=john; no (more answers) |