繁体   English   中英

序词到字符串

[英]prolog term to string

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

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

我想将其转换为:

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

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

你有什么主意吗? (我使用序言)

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

编辑:

如果您不介意丢失名称,则可能会发生这种情况。 至少在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_names选项来阅读条款,该选项为您提供阅读条款中的名称=变量对的列表。 所以也许这就是您所需要的。

这是一个读取术语的命令行,然后将变量与变量名统一,最后以您在问题中指定的方式将结果打印到原子中。

?- 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 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM