代码之家  ›  专栏  ›  技术社区  ›  Jsevillamol

prolog中dfg的匹配部分

  •  0
  • Jsevillamol  · 技术社区  · 7 年前

    我在prolog中定义了一个dfg语法,类似于:

    start --> subject, verb, object.
    subject --> ([i]; [you]).
    verb --> ([like]; [need]).
    object --> article, noun.
    article --> ([my];[your]).
    noun --> ([car] ; [bike]).
    

    现在,我想让一个谓词返回这个dfg接受的短语的对象部分。

    例如, objectPart([i, like, my, car], X) 应该返回 X = [my, car] .

    我该怎么做?

    1 回复  |  直到 7 年前
        1
  •  2
  •   joel76    7 年前

    可以这样做:

    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] .
    

    编辑 我改变了 对象 在里面 我的对象 因为swi prolog将对象用于xpce。