prolog,非常简单的dcg语法

时间:2012-12-19 16:49:22

标签: syntax prolog dcg

我试图理解prolog和dcg的基本语法,但很难获得关于真正基本内容的正确信息。看看下面的代码,我基本上只想实现这样的目标:

Output = te(a, st).

Code: 
    test(te(X,Y)) --> [X], test2(Y).
    test2(st(_X)) --> [bonk]. 

    ?- test(Output, [a, bonk],[]).
    Output = te(a, st(_G6369)). 

我想要做的就是在最后添加“st”这个词,而我所管理的最接近的方法就是这样做但不幸的是st跟随了一堆废话,很可能是因为单身人士_X。我只想让我的Output包含:te(a, st).

2 个答案:

答案 0 :(得分:2)

如果您想接受[Term, bonk]表单的输入并获取te(Term,st),则应更改test/2以接受bonk返回st

test(te(X,Y)) --> [X], test2(Y).
test2(st) --> [bonk].


?-  test(Output, [a, bonk],[]).
Output = te(a, st).

答案 1 :(得分:1)

正如你所说,由于_X,st之后是“一堆废话”(基本上,_G6369是变量的内部'名称',因为变量仍然是未实例化的prolog显示它; try {{ 1}}

无论如何,您可以简单地删除print(X), X=3, print(X).,因为您可以将任何您想要的内容作为参数:

(_X)

当然,如果您的输入中实际上没有test(te(X,Y)) --> [X], test2(Y). test2(st) --> [bonk]. ,并且您只想在最后添加bonk,则可以进一步简化:

st

或者如果你有test(te(X,st)) --> [X].

bonk

最后,通常建议使用phrase/3phrase/2,而不是手动添加参数。