简而言之,输入:
?- remove_second(([1,[2,1,[2],[3,3,[[3]],1,[1]],1],2,1,2,1,3],R).
输出:R=[1,[2,[],[3,[[3]],1,[]],1],2,1]
。
我的尝试无效:
delete_second_occurrence(_, _, [], []):-!.
delete_second_occurrence(X, Z, [X|O], [X|L]):-Z==0,nested_memeber(X, O),
delete_second_occurrence(X, 1, O, L).
delete_second_occurrence(X, Z, [X|O1], L):-Z==1, delete_second_occurrence(X, 0, O1, L).
nested_memeber(X, [X|O]):-!.
nested_memeber(X, [Y|O]):-not(is_list(Y)),!, nested_member(X, O).
nested_member(X, [Y|O]):-(!,nested_member(X, Y));(!,nested_member(X,O)).
is_list([]).
is_list([_|_]).
答案 0 :(得分:0)
我认为您希望所有列表都是唯一的?每个嵌套列表和外部列表必须具有唯一的元素。这应该适用于这种情况:
R = [1,[2,1,[2],[3,[[3]],1,[1]]],2,3]
不是最优化的代码,但它可以解决问题。
您输入的输出结果为remove_second([1,[2,1,[2],[3,3,[[3]],1,[1]],1],2,1,2,1,3],R).
= =AND(C2="NOT ANSWERED",A2=A3,B2=B3)
您可以删除许多预定义谓词,例如成员到成员和lengthOfList等