如何在Prolog中表示复杂嵌套对象?求相关示例与文献
在Prolog中表示复杂嵌套对象的方法探讨
近期我对Prolog产生了兴趣,想要了解如何用它表示并查询比常见父子示例更贴近实际的数据集。
为了实践,我生成了如下结构的小型数据集:
books: - titles: - My first book - My first attempt at a book authors: - firstname: Alice lastname: Ecila - firstname: Bob lastname: Obb
经过几次尝试,我得到了如下表示方式:
book(1). title(book(1), "My first book"). title(book(1), "My first attempt at a book"). author(book(1)). firstname(author(book(1)), "Alice"). firstname(author(book(1)), "Bob"). lastname(author(book(1)), "Ecila"). lastname(author(book(1)), "Obb").
这种方式能很好地查询书籍信息,但完全丢失了嵌套对象的属性关联,例如无法得知Alice对应的lastname。
另一方面,若尝试将书籍表示为单个术语,比如:
book( title("My first book"), author( firstname("Alice"), lastname("Ecila") ) ). book( title("My first book"), author( firstname("Bob"), lastname("Obb") ) ). book( title("My first attempt at a book"), author( firstname("Alice"), lastname("Ecila") ) ). book( title("My first attempt at a book"), author( firstname("Bob"), lastname("Obb") ) ).
这种写法会产生大量冗余数据,相当于把所有标题和作者的组合都展开,维护起来非常麻烦。
或者用列表嵌套的方式:
book( [ title("My first book"), title("My first attempt at a book") ], [ author( firstname("Alice"), lastname("Ecila") ), author( firstname("Bob"), lastname("Obb") ) ] ).
虽然结构更贴近原始数据集,但查询逻辑会变得过于复杂——比如要关联标题和对应的作者时,需要处理列表的匹配和遍历,大幅增加了代码复杂度。
树形结构的表示相对简单,但一般的图结构似乎更复杂。
因此我的问题是:在Prolog中,过去及当前表示复杂嵌套对象的首选方法是什么?同时我也在寻找该主题的相关示例及文献。
内容的提问来源于stack exchange,提问作者ITChap
相关产品推荐
相关产品推荐

