list - Prolog 从列表中删除元素

我有以下事实来删除列表中元素的所有出现。虽然输出是正确的,但是元素只是换了一个空格

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/

相关文章:

firefox - 如何删除 Firefox 中的 X 按钮?

regex - PowerShell 从脚本中删除所有注释

vue.js - Vue - 在 Chrome 开发工具中显示错误行

jenkins - 在airflow中的特定时间运行任务

reactjs - 在 React 中使用另一个上下文中的上下文

vue.js - 如何在组件内导出和导入多个函数?浏览器

prometheus - 如何在普罗米修斯中获取速率的分位数

python - 使用 Gmail Python 发送电子邮件

docker - 运行 docker-compose up 后数据库权限被拒绝

angular - 使用 ngrx 和选择器等待资源加载到守卫中