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

Prolog如何实现从指定节点输出所有关联节点及参数的列表

问题原因

你原有代码的findall仅收集了和目标节点关联的另一端节点X,没有把connects谓词中剩下的两个关联参数也加入结果,因此输出只包含相邻节点,没有携带额外的关联参数。

解决代码

你可以调整findall的收集逻辑,把每个匹配到的connects子句中除目标节点外的参数先封装为子列表,再打平为一维列表即可:

friends(Node, L):-
    findall(ParamGroup,
        ( % 匹配目标节点为connects第一个参数的场景
          connects(Node, X, A, B), ParamGroup = [X, A, B]
          % 匹配目标节点为connects第二个参数的场景
        ; connects(X, Node, A, B), ParamGroup = [X, A, B]
        ),
        NestedList
    ),
    flatten(NestedList, L).

执行效果

当执行查询?- friends(1,L)时,输出结果为:

L = [11, 10, 8, 12, 2, 6, 13, -3, -2, 14, 1, -5]

你给出的预期结果中缺少第四个关联参数1属于笔误,如果你确实需要省略特定位置的参数,修改ParamGroup的定义即可。


内容的提问来源于stack exchange,提问作者Flávio Jardim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:36:04