我有以下事实来删除列表中元素的所有出现。虽然输出是正确的,但是元素只是换了一个空格
remover( _, [], []).
remover( R, [R|T], [T2]) :- remover( R, T, T2).
remover( R, [H|T], [H|T2]) :- H \= R, remover( R, T, T2).
当我调用 remover 时,输出是:
remover(3,[1,2,3,4,3],Res)
Res = [1, 2, [4, []]]
我还有以下事实,只删除第一次出现,但输出与上面相同
remover_primeira( _, [], []).
remover_primeira( R, [R|T], [T2]) :-remover_primeira( R, T, T2),!.
remover_primeira( R, [H|T], [H|T2]) :- H \= R, remover_primeira( R, T, T2).
我做错了什么?
最佳答案
你不应该将 T2
包装在第二个子句的单例列表中,它应该是:
remover( _, [], []).
remover( R, [R|T], <b>T2</b>) :- remover( R, T, T2).
remover( R, [H|T], [H|T2]) :- H \= R, remover( R, T, T2).
如果您只需要删除第一个 出现,那么您不应该从找到该元素的那一刻起递归:
remover( _, [], []).
remover( R, [R|T], <b>T</b>).
remover( R, [H|T], [H|T2]) :- H \= R, remover( R, T, T2).
https://stackoverflow.com/questions/60919189/