如何在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]
提前致谢。
答案 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
中的任何其他功能。