0

我在 Prolog 中有一个 DCG,我可以像这样查询:

q(Tree, [name, of, company], []).

并得到一个响应,显示解析查询所采用的路径:

Tree = q(['company (Class)', 'name (Attribute)'])

现在我想提出一个查询,例如:

q(Tree, [name, of, acme], []).

并且无法匹配 term acme,我想创建一个变量Acme,以便得到类似的东西:

Acme = 公司
树 = q(['公司(类)', '名称(属性)'])

我正在使用 SWI-Prolog 并从另一种语言查询它,这就是为什么查询都是小写的。我的另一个选择是创建所有有效术语的词典并用变量替换查询中的所有未知数,但我希望有一个 Prolog 解决方案。

谢谢你。

4

1 回答 1

1

我是否正确理解您需要所有基于前缀的列表?以下内容是否适合您:

1 ?- p([name,of,company],L).
L = [name, of, company] ;
L = [name, of|_G456] ;
L = [name|_G453] ;
true.

2 ?- p([name,of,department,of,company],M).
M = [name, of, department, of, company] ;
M = [name, of, department, of|_G551] ;
M = [name, of, department|_G548] ;
M = [name, of|_G545] ;
M = [name|_G542] ;
true.

如果这是预期的行为,那么实现它的代码可以是

p([],[]).
p([X|Xs],[X|Ys]) :- p(Xs,Ys).
p([_|_],_).
于 2012-04-10T11:36:26.833 回答