私は Prolog を初めて使用し、実行しようとしている述語に固執しています。その目的は、与えられた P を持つクワッド [X、Y、S、P] のリストを再帰することです。クワッドが同じ P を持っている場合、それは一時的なリストに格納されます。新しい P に遭遇すると、一時リストが長さ 2 より大きいかどうかを確認し、長さ 2 未満の場合は一時リストを出力リストに格納し、2 未満の場合はクワッドを削除し、再帰を再び開始します。新しいP.
私のコードは次のとおりです。
deleteUP(_,[],[],[]).
deleteUP(P,[[X,Y,S,P]|Rest],Temp,Output):-
!,
appends([X,Y,S,P],Temp,Temp),
deleteUP(P,[Rest],Temp,Output).
deleteUP(NextP,[[X,Y,S,P]|Rest],Temp,Output):-
NextP =\= P,
listlen(Temp,Z),
Z > 1, !,
appends(Temp,Output,Output),
deleteUP(NextP,[_|Rest],Temp,Output).
listlen([], 0).
listlen([_|T],N) :-
listlen(T,N1),
N is N1 + 1.
appends([],L,L).
appends([H|T],L,[H|Result]):-
appends(T,L,Result).
助けてくれてありがとう!