我有一个关于抽象语法树的问题。
特别是我想用特定的方式对几棵树进行排序
期限顺序。
如何为具有以下属性的 AST 定义术语顺序:
就像标准的内置术语顺序。
pos/6 表示源位置。
这些仿函数应该在术语 order 中被忽略,即仿函数 pos 的所有术语应该比较相等。
是否可以扩展内置的术语顺序
'pos' 的特殊情况?
什么是最有效的解决方案,什么是最
可读的解决方案?
也许我还应该提到我们的 AST 可能非常大,我只是对一个 AST 进行了基准测试,它有 217479 个适当的仿函数(忽略无效原子)
最佳答案
我会定义一个关系 ast_without_pos
/2 与 AST 相关 A0
到一个术语 A
与 A0
相同除了所有 pos/6 子项都被相同的项替换,比如原子 t
,然后对这些结果项使用标准项顺序。我认为这是非常可读的,而且效率也相当高。
关于prolog - 复杂抽象语法树的词序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9991419/