定从句文法 Prolog

Definite Clause Grammars Prolog

我正在尝试使用 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 重复?

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 ?- noun(X,Y,[woman,1],Z).
X = 1,
Y = woman(1),
Z = [].

5 ?- phrase(noun(X,Y),[woman,1]).
X = 1,
Y = woman(1).