我对抽象语法树有疑问 特别是我想用特定的几种树来排序 期限订单。
如何使用以下属性定义AST的术语顺序:
是否可以扩展内置术语顺序 'pos'的特例?
什么是最有效的解决方案,最重要的是什么 可读解决方案?
也许我还应该提到我们的AST可能非常大,我只是对一个AST进行了基准测试,它有217479个适当的仿函数(忽略了nullary原子)
答案 0 :(得分:4)
我会定义一个关系ast_without_pos
/ 2,它将AST A0
与A
的术语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
对你有任何帮助吗?