首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >prolog term to string

prolog term to string
EN

Stack Overflow用户
提问于 2011-07-24 20:45:11
回答 2查看 2.7K关注 0票数 2

我有一个类似这样的prolog列表:

代码语言:javascript
复制
[p(X,Y,Z),r(H,G,K)] 

我想把它转换成这样:

代码语言:javascript
复制
'p(X,Y,Z)r(H,G,K)'  

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

你有什么想法吗?(我使用prolog)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-24 21:23:53

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

编辑:

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

代码语言:javascript
复制
?- format(atom(A), "~w~w", [p(X,Y,Z),r(H,G,K)]).
A = 'p(_G924,_G925,_G926)r(_G931,_G932,_G933)'.
票数 3
EN

Stack Overflow用户

发布于 2011-08-02 20:47:54

您可以使用variable_names选项阅读术语,该选项为您提供了已读术语中的Name=Variable对的列表。所以也许这就是你所需要的。

下面是一个命令行,它读取术语,然后将变量与它们的名称统一起来,最后按照问题中指定的方式将结果打印到一个原子中。

代码语言:javascript
复制
?- 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)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6806865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档