我正在尝试在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
会重复?
答案 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)。