我有规则:
best_fit(Team, Enemies, Result, List) :-
findall((H, E), score(H, Enemies, Team, E), List),
其中分数定义为:
score(Hero, Enemies, Team, Result) :-
hero(Hero),
...
我只想找到(H,E(,其中H不在敌人或团队中。我后来尝试过exclude
,但结果是元组,使其工作有点复杂。有没有办法用findall
方法把它过滤掉?我该如何处理?
您可以在目标中强制执行:
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
不是Enemies
的成员,并且H
不是Team
的成员。