0

我想做的是:

给定一个字符列表,以了解哪个列表与它最矛盾,所以我将图像放在列表中[kraken,scorpia,zulrah],这样它就会检查每个字符的攻击类型,并且会看到每个字符最有效的攻击类型,我会收到3个老板的名单。

% 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
4

1 回答 1

1

首先,创建一个谓词来验证单个 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).
于 2020-05-26T15:55:18.090 回答