我试图理解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).
答案 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