我正在尝试使用元编程和DCG将列表转换为使用Prolog的子句列表。例如,我想把[a,man,is,a,human]变成[(human(X): - man(X))]
我认为我可以使用= ..从他们的列表中编写术语
组成部分。例如,调用Term =.. [f,a,b,c]
会将Term绑定到f(a,b,c)
。
我的问题是尝试将其与DCG结合使用。到目前为止,我已经使用DCG来检查句子是否是有效的形式:
%% syllogism( +S )
% Holds if the sentence S is one of four syllogisms
% a B is a C
syllogism --> article, subject, is_, (article ; [] ), subject .
% some B is a C
syllogism --> some, subject, is_, (article ; [] ), subject .
% no B is a C
syllogism --> no, subject, is_, (article ; [] ), subject .
% some B is not a C
syllogism --> some, subject, is_, not, (article ; [] ), subject .
subject --> [X] .
some --> [some] .
is_ --> [is] .
article --> [a] .
article --> [every] .
not --> [not] .
no --> [no] .
但是我试图对此进行修改,以便在依赖DCG的同时生成一个子句列表。
编辑: 基本上我想要实现的是获取列表L并生成一个子句列表: [a,man,is,a,human]应该产生[man(X): - human(X)]
同样:[不,B,是,a,C]应该产生[(假: - B(X),C(X))]
感谢您的时间。
答案 0 :(得分:2)
看起来你需要一个元解释器http://ktiml.mff.cuni.cz/~bartak/prolog/meta_interpret.html
最终,Prolog中的所有问题都归结为使用正确的元解释器。