String prolog术语到字符串

String prolog术语到字符串,string,prolog,String,Prolog,我有这样一个序言列表: [p(X,Y,Z),r(H,G,K)] 我想把它转换成 为此: 'p(X,Y,Z)r(H,G,K)' 它只是一个谓词列表,应该转换为字符串 你知道吗?(我使用prolog)我认为这样做是不可能的。声明变量后,其名称将丢失以供进一步处理 编辑: 如果你不介意把名字弄丢的话,这样的事情是可能的。至少在SWI Prolog中: ?- format(atom(A), "~w~w", [p(X,Y,Z),r(H,G,K)]). A = 'p(_G924,_G925,_G9

我有这样一个序言列表:

[p(X,Y,Z),r(H,G,K)] 
我想把它转换成 为此:

'p(X,Y,Z)r(H,G,K)'  
它只是一个谓词列表,应该转换为字符串


你知道吗?(我使用prolog)

我认为这样做是不可能的。声明变量后,其名称将丢失以供进一步处理

编辑:

如果你不介意把名字弄丢的话,这样的事情是可能的。至少在SWI Prolog中:

?- format(atom(A), "~w~w", [p(X,Y,Z),r(H,G,K)]).
A = 'p(_G924,_G925,_G926)r(_G931,_G932,_G933)'.

您可以使用
variable\u names
选项读取术语,该选项为您提供读取术语中名称=变量对的列表。也许这就是你需要的

下面是一个命令行,它读取术语,然后将变量与其名称统一起来,最后以您在问题中指定的方式将结果打印到atom中

?- 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\u term/2
)。

伙计们,您真的确定这一点吗?没有一种方法可以像字符串操作一样将“添加到变量的存在中,并最终添加到”中?就像我说的,您有列表,实际上没有变量名。您不能修改您没有的内容。这几乎就像尝试从[p(,,),r(,)]中提取名称一样。严格地说,Prolog没有变量,所以我相信你,如果有人有想法,我们会等待。我看到了一个名为EclipseProlog的prolog,它有这个功能,但是这个网站是用日语写的,我什么都不懂。。等等,我联系你你想解决的实际问题是什么?你在哪里有原始清单?在文本文件中?