在 Prolog 中匹配 DFG 的一部分
Matching part of a DFG in Prolog
我在 Prolog 中定义了一个 DFG 文法,它是这样的:
start --> subject, verb, object.
subject --> ([i]; [you]).
verb --> ([like]; [need]).
object --> article, noun.
article --> ([my];[your]).
noun --> ([car] ; [bike]).
现在,我想要一个谓词 return 将此 DFG 接受的短语的宾语部分告诉我。
例如,objectPart([i, like, my, car], X)
应该 return X = [my, car]
。
我该怎么做?
可以这样做:
start(O) --> subject, verb, my_object(O).
subject --> ([i]; [you]).
verb --> ([like]; [need]).
my_object(L) --> article(A), noun(N), {L = [A,N]}.
article(A) --> ([my],{A=my};[your],{A=your}).
noun(N) --> ([car],{N=car} ; [bike],{N=bike}).
objectPart(Lst, R) :-
phrase(start(R), Lst).
结果:
?- objectPart([i, like, your, car], Z).
Z = [your, car] .
EDIT 我在 my_object 中更改了 object 因为 SWI-Prolog 使用XPCE 的对象。
我在 Prolog 中定义了一个 DFG 文法,它是这样的:
start --> subject, verb, object.
subject --> ([i]; [you]).
verb --> ([like]; [need]).
object --> article, noun.
article --> ([my];[your]).
noun --> ([car] ; [bike]).
现在,我想要一个谓词 return 将此 DFG 接受的短语的宾语部分告诉我。
例如,objectPart([i, like, my, car], X)
应该 return X = [my, car]
。
我该怎么做?
可以这样做:
start(O) --> subject, verb, my_object(O).
subject --> ([i]; [you]).
verb --> ([like]; [need]).
my_object(L) --> article(A), noun(N), {L = [A,N]}.
article(A) --> ([my],{A=my};[your],{A=your}).
noun(N) --> ([car],{N=car} ; [bike],{N=bike}).
objectPart(Lst, R) :-
phrase(start(R), Lst).
结果:
?- objectPart([i, like, your, car], Z).
Z = [your, car] .
EDIT 我在 my_object 中更改了 object 因为 SWI-Prolog 使用XPCE 的对象。