首先,我们用英文语法分析两个句子:
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.