【问题标题】:Atom escaping rules in PrologProlog中的原子转义规则
【发布时间】:2013-03-22 21:27:40
【问题描述】:

我需要将使用 Java 中的任意术语表示表示的 Prolog 程序导出到文件。这个想法是 Prolog 解释器应该能够在之后查阅生成的文件。 我的问题是关于在文件中写入表示原子术语的 Java 字符串的正确方法。

比如字符串中间有空格,在文件中应该用单引号括起来:

 hello world  变成   'hello world'

并且导出器应该考虑应该转义的字符:

 '  变成  '\''

有人可以指出这些规则被指定的地方吗?以及:我可以假设这些规则受到主要 Prolog 实现者的尊重吗? (我的意思是,按照这些规则生成的 Prolog 程序会被大多数 Prolog 解释器正确解析?)。

【问题讨论】:

    标签: prolog iso-prolog


    【解决方案1】:

    这方面的确切位置是标准 ISO/IEC 13211-1:1995, quoted_token (* 6.4.2 *)。请参阅this answer 如何以 30 美元的价格获得它。

    由于有很多额外的东西,比如续行等等,精确的语法是相当复杂的。如果你只写应该被 Prolog 读取的原子,事情会容易一些。同样在这种情况下,您可以随时引用,这使得再次编写更简单。

    需要注意的一些事项:

    只有简单的空格可以作为带引号的原子的布局出现。所有其他空格都需要转义,如\t\n (abrftnv)。许多系统也接受其他布局,但它们在非常小的细节上彼此不同。

    反斜杠和引号必须转义。

    可打印 ASCII 范围之外的字符取决于系统支持的 PCS。在符合标准的系统中,随附的文档应定义附加字符(扩展字符)的分类方式。文档质量参差不齐。

    无论如何,从 1.4.1 开始,也要使用 GNU-Prolog 测试您的界面。迄今为止,就语法而言,GNU 1.4.1+ 和标准之间没有任何区别。

    这里是some 240+ syntax related test cases。请报告任何疏忽!

    【讨论】:

      【解决方案2】:

      实用提示:如果您使用 Prolog 发出 writeq,其中包含您需要了解的数据,您会在需要时获得报价。

      【讨论】:

      • 感谢提示,您知道大多数 Prolog 解释器是否支持 writeq 吗?
      • 是的,这是编写可以回读的复杂术语的实用方法。它是 ISO 标准的一部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      相关资源
      最近更新 更多