list - Prolog谓词帮助:从列表中删除N次
问题描述
问题:deleteNum(+Element, +List, -NewList, +NumToDelete)
接受一个列表、一个元素以及要从List
. NewList
应该是原来的List
减号NumToDelete
Elements
。元素的哪些实例被删除并不重要,也不应给出替代答案。例如,
例子:
?- deleteNum(3, [2,3,5,4,3,3], NewList, 2).
NewList = [2,5,4,3]
这是我尝试过的代码,但是当我尝试上面的示例时它一直返回 false。我不确定为什么。
deleteNum(_, [],[], 0).
deleteNum(X, [X|T], T, 0).
deleteNum(X, [H|T], [H|T1], Num):-
Num1 is Num - 1,
deleteNum(X, T, T1, Num1).
非常感谢您提前。
解决方案
您似乎将两种情况与此谓词混为一谈:
deleteNum(X, [H|T], [H|T1], Num):-
Num1 is Num - 1,
deleteNum(X, T, T1, Num1).
它还没有消除X
,它仍然在减少Num
。
这里有几种方法可以做你想做的事:
deleteNum(_, L, L, 0).
deleteNum(X, [H|T], [H|T1], Num) :-
X \= H,
deleteNum(X, T, T1, Num).
deleteNum(X, [X|T], T1, Num):-
Num1 is Num - 1,
deleteNum(X, T, T1, Num1).
或者:
deleteNum(_, L, L, 0).
deleteNum(X, [X|T], T1, Num):-
!,
Num1 is Num - 1,
deleteNum(X, T, T1, Num1).
deleteNum(X, [H|T], [H|T1], Num) :-
deleteNum(X, T, T1, Num).
这取决于你喜!
不喜欢。
两者都成功?- deleteNum(3, [2,3,5,4,3,3], NewList, 2), write(NewList), nl.
并统一NewList
到[2, 5, 4, 3]
.
请记住,Prolog 不会返回任何内容。它只是成功或失败。在此过程中,它只是试图统一变量以取得成功。
推荐阅读
- android - 如何在官方 Youtube 应用中检测当前正在播放的视频
- maven - 如何从 Maven POM 调用 Groovy 文件
- ruby - 如何在 ruby 测试中正确使用正则表达式
- testing - 如何模拟或模拟 gRPC API?
- c# - 实体框架:从集合中删除所有实体
- angular - nativescript 抽屉导航角度 - 如何导航?
- jquery - jQuery 验证没有按预期工作。这可能是什么原因?
- c# - 使用 REGValue 在任务栏中创建 Windows 工具栏
- dart - Flutter:为 Painter 类设置背景图像
- java - 在 Windows 10 上构建 SonarQube 时出现问题