【问题标题】:Prolog building lists from predicates listProlog 从谓词列表中构建列表
【发布时间】:2013-04-12 14:51:29
【问题描述】:

我在 Prolog 中有以下谓词:

rules('Archer','NX-01').
rules('Kirk','NCC-1701').
rules('Picard','NCC-1701-D').
rules('Janeway','Voyager').
rules('Almak','IRWTMet').

“Archer”、“Kirk”、“Picard”、“Janeway”和“Almak”是舰船指挥官 'NX-01'、'NCC-1701'、'NCC-1701-D'、'Voyager' 和 'IRWTMet' 是船舶。

所以我想,给定一个船舶列表,返回一个船舶指挥官列表。

我正在尝试这个:

list_ship_commanders([],_).
list_ship_commanders([Ship|T],R):-
   findall(Commander,rules(Commander,Ship),R),
   list_ship_commanders(T,R).

上述代码仅在 Ship 列表只有一个元素时有效。我正在使用“findall”,但我不确定这是正确的方式。

【问题讨论】:

    标签: prolog


    【解决方案1】:

    根据您的数据(和您的代码),不清楚您是否允许每个指挥官拥有多艘舰艇(或每艘舰艇拥有多个指挥官:)。

    如果你对这些细节不感兴趣,你可以试试:

    list_ship_commanders(Ships, Commanders) :-
        findall(Commander, (member(S, Ships), rules(Commander, S)), Commanders).
    

    您将获得一份可能重复​​的指挥官列表,并且没有指向相关规则的链接/2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 2017-08-14
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多