定从句文法 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).
我正在尝试使用 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).