我是 Prolog 的新手,我被困在我正在尝试做的谓词上。它的目的是通过给定 P 的四边形列表 [X,Y,S,P] 进行递归,当四边形具有相同的 P 时,它将其存储在临时列表中。当它遇到一个新的 P 时,它会查看临时列表是否大于长度 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).
谢谢你的帮助!