复杂抽象语法树的术语顺序

时间:2012-04-03 10:28:39

标签: prolog iso-prolog

我对抽象语法树有疑问 特别是我想用特定的几种树来排序 期限订单。

如何使用以下属性定义AST的术语顺序:

  1. 对于所有条款而言,订单的行为完全正确 就像标准的内置顺序一样。
  2. 在AST中深深嵌套有仿函数的术语 pos / 6表示源位置。 这些仿函数应该在术语顺序中被忽略,即仿函数pos的所有术语应该相等。
  3. 是否可以扩展内置术语顺序 'pos'的特例?

    什么是最有效的解决方案,最重要的是什么 可读解决方案?

    也许我还应该提到我们的AST可能非常大,我只是对一个AST进行了基准测试,它有217479个适当的仿函数(忽略了nullary原子)

2 个答案:

答案 0 :(得分:4)

我会定义一个关系ast_without_pos / 2,它将AST A0A的术语A0相关联,除了所有pos / 6子句都是替换为相同的术语,比如原子t,然后在这些结果术语上使用标准术语顺序。我认为这非常易读,而且效率也很高。

答案 1 :(得分:2)

你可以在AST上查看Zippers吗?

以下是列表示例:

http://blog.logtalk.org/2013/04/zipper-lists-in-prolog/

如果您获得了白蚁的来源,我认为您会发现一种更为笼统的实施方式。

http://www.complang.tuwien.ac.at/adrian/termite/Manual/Contents.html

对你有任何帮助吗?