我有以下事实来删除列表中元素的所有出现。虽然输出是正确的,但该元素只是被替换为空格
remover( _, [], []).
remover( R, [R|T], [T2]) :- remover( R, T, T2).
remover( R, [H|T], [H|T2]) :- H \= R, remover( R, T, T2).
Run Code Online (Sandbox Code Playgroud)
当我调用删除器时,输出是:
remover(3,[1,2,3,4,3],Res)
Res = [1, 2, [4, []]]
Run Code Online (Sandbox Code Playgroud)
我还有以下事实仅删除第一次出现,但输出与上面相同
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).
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
您不应该T2在第二个子句中包装单例列表,它应该是:
remover( _, [], []).
remover( R, [R|T], T2) :- remover( R, T, T2).
remover( R, [H|T], [H|T2]) :- H \= R, remover( R, T, T2).Run Code Online (Sandbox Code Playgroud)
如果您只需要删除第一个出现的元素,那么您不应该从找到该元素的那一刻起递归:
remover( _, [], []).
remover( R, [R|T], T).
remover( R, [H|T], [H|T2]) :- H \= R, remover( R, T, T2).Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13827 次 |
| 最近记录: |