You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:10:32