首先,创建一个谓词来验证单个 Boss 的计数器:
verify_con(Boss, ConBoss) :- boss(Boss,MainSkill),
superEffective(MainSkill,ConSkill),
boss(ConBoss,ConSkill), !.
请注意,此谓词将始终获得输入老板的第一个最佳计数器。如果您想要所有可能的组合,只需删除, !
末尾的。
其次,使用递归遍历输入列表并构建输出列表。您可以使用append/3
附加输出数组。
verify_con_list([],[]).
verify_con_list([H|T], LIST) :- verify_con(H, ConBoss),
verify_con_list(T, L1),
append([ConBoss],L1, LIST).
如有必要,您可以append/3
在代码顶部定义函数,如下所示:
append([], X, X).
append([H|T], X, [H|S]) :- append(T, X, S).
例子
单路输出:
?- verify_con(kraken, A).
A = scorpia
列表输入:
?- verify_con_list([kraken, scorpia, zulrah], Con).
Con = [scorpia, zulrah, kraken]
完整代码:
append( [], X, X).
append( [X | Y], Z, [X | W]) :- append( Y, Z, W).
% boss(Name, Type) Name = Name of boss, Type = Attack type
boss(kraken,magic).
boss(scorpia,melee).
boss(zulrah,ranged).
boss(cerberus,melee).
boss(abyssal_sire,melee).
boss(obor,melee).
boss(sarachnis,ranged).
boss(skotizo,melee).
boss(venenatis,magic).
superEffective(magic,melee). %magic is more effective against melee
superEffective(ranged,magic). %ranged is more effective against magic
superEffective(melee,ranged). %melee is more effective against ranged
verify_con(Boss, ConBoss) :- boss(Boss,MainSkill),
superEffective(MainSkill,ConSkill),
boss(ConBoss,ConSkill), !.
verify_con_list([],[]).
verify_con_list([H|T], LIST) :- verify_con(H, ConBoss),
verify_con_list(T, L1),
append([ConBoss],L1, LIST).
%verify_con(kraken, A).
%verify_con_list([kraken, scorpia, zulrah], Con).