我有一个类似这样的prolog列表:
[p(X,Y,Z),r(H,G,K)] 我想把它转换成这样:
'p(X,Y,Z)r(H,G,K)' 它只是一个谓词列表,应该转换为一个字符串。
你有什么想法吗?(我使用prolog)
发布于 2011-07-24 21:23:53
我认为这样做是不可能的。声明变量后,它的名称将丢失,以便进一步处理。
编辑:
如果你不介意丢掉名字,这样的事情是可能的。至少在SWI-Prolog中:
?- format(atom(A), "~w~w", [p(X,Y,Z),r(H,G,K)]).
A = 'p(_G924,_G925,_G926)r(_G931,_G932,_G933)'.发布于 2011-08-02 20:47:54
您可以使用variable_names选项阅读术语,该选项为您提供了已读术语中的Name=Variable对的列表。所以也许这就是你所需要的。
下面是一个命令行,它读取术语,然后将变量与它们的名称统一起来,最后按照问题中指定的方式将结果打印到一个原子中。
?- read_term(Term, [variable_names(VarNames)]), maplist(call, VarNames),
with_output_to(atom(Atom), maplist(write, Term)).
|: [p(X,Y,Z),r(H,G,K)].
Term = [p('X', 'Y', 'Z'), r('H', 'G', 'K')],
VarNames = ['X'='X', 'Y'='Y', 'Z'='Z', 'H'='H', 'G'='G', 'K'='K'],
Atom = 'p(X,Y,Z)r(H,G,K)'.请注意,它修改了已读术语,因此您可能需要先复制它(copy_term/2)。
https://stackoverflow.com/questions/6806865
复制相似问题