【发布时间】:2011-08-02 20:56:03
【问题描述】:
我有一个这样的序言列表:
[p(X,Y,Z),r(H,G,K)]
我想转换它 进入这个:
'p(X,Y,Z)r(H,G,K)'
它只是一个谓词列表,应该转换成一个字符串。
你有什么想法吗? (我使用序言)
【问题讨论】:
-
您要解决的实际问题是什么?您在哪里“拥有”原始列表?在文本文件中?
我有一个这样的序言列表:
[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 选项阅读术语,该选项会为您提供阅读术语中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)。
【讨论】: