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
相关产品推荐
相关产品推荐

