Ich versuche, replaceEltByclass zu definieren (E1: Liste, E2: Liste) E ist eine Liste ohne Unterliste. Jedes Element von E1, das zu einer Klasse C gehört, wird durch die Elemente von C ersetzt. Das Endergebnis wird in E2 eingegeben. Zum Beispiel liefert das Ziel rep_class ([e1, e4, e6, e11], E2) die Liste E2: [[e1, e8, e10], e4, [e3, e6, e7], e11]. Ich habe keine guten Ergebnisse.Ersetzen jedes Element einer Liste durch eine bestimmte Liste
/*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).
Es hat das richtige Verhalten. Ich verstehe auch die Fehler und die Notwendigkeit, das Finden-Prädikat zu verwenden. – Hana