在SWI Prolog中重命名变量

时间:2014-03-30 20:33:38

标签: prolog

如何在SWI Prolog中重命名变量?

我试着像这样使用numbervars谓词。

numbervars(Xs,1,_,[functor_name(name)]).

因此,如果Xs是一个包含4个变量的列表,那么当我提交' writeln(Xs)'时,它将如下所示。

[name(1),name(2),name(3),name(4)]

如何使用该仿函数或任何其他方法删除括号并使其看起来像:

[name1,name2,name3,name4]

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以编写自己的numbervars/4子集(或根据需要完全重写您自己的子集)。这是执行您所描述的特定任务的子集:

build_atoms([Var|VarList], N, Prefix) :-
    atom_number(Atom, N),
    atom_concat(Prefix, Atom, Var),
    N1 is N + 1,
    build_atoms(VarList, N1, Prefix).
build_atoms([], _, _).

这接受变量列表并按照Prefix中给出的原子顺序实例化它们,并以N开头。

例如:

?- X = [A,B,C], build_atoms(X, 1, foo).
X = [foo1, foo2, foo3],
A = foo1,
B = foo2,
C = foo3.

?-

可以轻松扩展此功能,以包含您希望的numbervars中的任何其他功能。