prolog term to string

时间:2011-07-24 12:45:11

标签: string prolog

我有一个这样的序言列表:

[p(X,Y,Z),r(H,G,K)] 

我希望转换它 进入这个:

'p(X,Y,Z)r(H,G,K)'  

它只是一个谓词列表,应该转换为字符串。

你知道吗? (我用prolog)

2 个答案:

答案 0 :(得分:3)

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

修改

如果您不介意丢失名字,这样的事情是可能的。至少在SWI-Prolog:

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

答案 1 :(得分:0)

您可以使用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)。