【发布时间】:2017-02-01 13:41:45
【问题描述】:
我尝试定义 replaceEltByclass(E1:list,E2:list) E 是一个没有子列表的列表。 E1 中属于 C 类的每个元素都被替换为 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).
【问题讨论】: