【问题标题】:prolog term to string序言词到字符串
【发布时间】:2011-08-02 20:56:03
【问题描述】:

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

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

我想转换它 进入这个:

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

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

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

【问题讨论】:

  • 您要解决的实际问题是什么?您在哪里“拥有”原始列表?在文本文件中?

标签: string prolog


【解决方案1】:

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

编辑:

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

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

【讨论】:

  • 各位,你确定吗?
  • 没有办法像字符串操作一样将 ' 添加到变量的存在和 ' 最后?
  • 就像我说的,你有列表,但实际上没有变量名。你不能修改你没有的东西。
  • 这几乎就像尝试从 [p(,,),r(,,)] 中提取名称。同样严格来说Prolog没有变量
  • 好的,我相信你,如果有人有想法,我们会等待。我看到了一个叫做 Eclipse-prolog 的 prolog,它有这个功能,但是这个网站是日文的,我什么都不懂.. 等等我链接你
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多