确定条款语法Prolog

时间:2016-06-17 17:57:16

标签: prolog dcg

我正在尝试在Prolog中为英语编写语法,并提供一些基本规则,例如:

s --> np, vp.
np --> pn.
np --> det, noun.
pn --> [vincent].
pn --> [mia].
det --> [a].

我确实理解这些如何工作以及如何使用phrase语句查询它们,但是当涉及到以下规则时:

noun(X, woman(X)) --> [woman].
iv(Y, snort(Y)) --> [snorts].

我输了。这些是什么意思?为什么变量X会重复?

1 个答案:

答案 0 :(得分:2)

noun(X, woman(X)) --> [woman].

相同
noun(X, woman(X), A, B) :- A = [woman | B].

这当然使X变量未实例化。也许你打算

noun(X, woman(X)) --> [woman, X].

相当于

noun(X, woman(X), A, B) :- A = [woman, X | B].

像往常一样,重复的逻辑变量表明统一的相同性:

  

4? - 名词(X,Y,[女,1],Z)。
  X = 1,
  Y =女(1),
  Z = []。
  
   5? - 短语(名词(X,Y),[女,1])   X = 1,
  Y =女人(1)。