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], T2) :- remover( R, T, T2).
remover( R, [H|T], [H|T2]) :- H \= R, remover( R, T, T2).
如果您只需要删除第一次出现,那么您不应该从找到该元素的那一刻起递归:
remover( _, [], []).
remover( R, [R|T], T).
remover( R, [H|T], [H|T2]) :- H \= R, remover( R, T, T2).
推荐阅读
- python - 想在一个函数中查找年同比和季度计算
- node.js - 有没有办法识别快速服务器到服务器的请求来源
- postgresql - psql 命令问题与//(双斜杠)
- jquery - 无法使用 ajax GET 显示数据,因为 url 中有错误
- macos - 在任务中使用 Ansible 成为密码
- flutter - 如何在颤动中自定义表格日历标题
- docker - Docker Compose - 使用上下文构建时服务无法共享命名卷
- powerapps - 如何通过对 PowerApps 中的集合进行聚合来执行分组
- django - 允许用户在 Django 中提交表单一次
- python - 从 Python 中的另一个脚本导入