1
我尝试定义replaceEltByclass(E1:list,E2:list)E是没有子列表的列表。属于C类的E1的每个元素被C的 元素替代。最终结果被放入E2中。例如,目标rep_class([e1,e4,e6,e11],E2)将提供列表E2:[[e1,e8,e10],e4,[e3,e6,e7],e11]。我没有很好的结果。用特定列表替换列表中的每个元素
/*The code*/
/*facts*/
class(c1,[e3, e6, e7]).
class(c2,[e1, e8, e10]).
/*rules*/
rep_class([],[]).
rep_class([E|Q],E2) :-
class(C,L),
not(member(E,L)),
concat(E2,E,E2),
rep_class(Q,E2).
rep_class([E|Q],E2) :-
class(C,L),
member(E,L),
concat(E2,L,E2),
rep_class(Q,E2).
/*conventional concat*/
concat([],L,L).
concat([H|T],L,[H|Res]) :- concat(T,L,Res).
它正确的行为。我也理解错误和使用findall谓词的必要性。 – Hana