1

我有规则:

best_fit(Team, Enemies, Result, List) :-
    findall((H, E), score(H, Enemies, Team, E), List),

其中分数定义为:

score(Hero, Enemies, Team, Result) :- 
   hero(Hero),
...

我只想找到 H 不在 Enemies 或 Team 中的 (H,E)。我后来尝试过,exclude但结果是元组,使它工作有点复杂。有没有办法在方法中过滤掉它findall?我该如何处理?

4

1 回答 1

2

您可以在目标中强制执行:

best_fit(Team, Enemies, Result, List) :-
    findall((H, E), (
        score(H, Enemies, Team, E),
        \+ member(H, Enemies),
        \+ member(H, Team),
    ), List).

因此,在这里我们修改了目标,使其满足如果score(H, Enemies, Team, E) 并且 H不是的成员,并且不是的成员。EnemiesHTeam

于 2019-11-13T18:28:08.850 回答