Prolog101(14)

首先,我们用英文语法分析两个句子:
The dog ate the bone.
The big brown mouse chases a lazy cat.

sentence(句子): 
nounphrase(名词短语), verbphrase(动词短语).  

nounphrase(名词短语): 
determiner(限定词), nounexpression(名词表达式).  
nounphrase (名词短语): 
nounexpression(名词表达式).  

nounexpression(名词表达式):  
noun.  
nounexpression(名词表达式):
adjective(形容词), nounexpression(名词表达式).  

verbphrase(动词短语): 
verb(动词), nounphrase(名词短语).  

determiner(限定词): 
the | a.  

noun(名词): 
dog | bone | mouse | cat.  

verb(动词): 
ate | chases.  

adjective(形容词):  
big | brown | lazy.  

差异表:它由两个相关的表构成,第一个表称为全表,而第二个表称为余表。通常使用‘-’连接这两个表。它的形式是X-Y。

%单个词的判断规则:如果列表的第一个元素是所需的单词,那么余表就是除去第一个单词的表。
%名词
noun([dog|X]-X). 
noun([cat|X]-X). 
noun([mouse|X]-X). 

%动词
verb([ate|X]-X). 
verb([chases|X]-X). 

%形容词
adjective([big|X]-X). 
adjective([brown|X]-X). 
adjective([lazy|X]-X). 

%限定词
determiner([the|X]-X). 
determiner([a|X]-X). 

%短语判断规则
nounphrase(NP-X):- 
determiner(NP-S1), 
nounexpression(S1-X). 

nounphrase(NP-X):- 
nounexpression(NP-X). 
nounexpression(NE-X):- 
noun(NE-X). 

nounexpression(NE-X):- 
adjective(NE-S1), 
nounexpression(S1-X). 

verbphrase(VP-X):- 
verb(VP-S1), 
nounphrase(S1-X).

%语句判断规则:如果能够从列表S的头开始,提取出一个名词短语,其余部分S1,并且能够从S1的头开始,提取出一个动词短语,并且其余部分为空表,那么列表S是一个句子。
sentence(S) :- 
nounphrase(S-S1), 
verbphrase(S1-[]). 

测试一下:

?- sentence([the,lazy,mouse,ate,a,dog]).
true .

?- sentence([the,dog,ate]).
false.

?- sentence([a,big,brown,cat,chases,a,lazy,brown,dog]).
true .

?- sentence([the,cat,jumps,on,the,mouse]).
false.

Leave a Reply

Your email address will not be published. Required fields are marked *

*