【问题标题】:prolog how to remove an element from a list?prolog如何从列表中删除一个元素?
【发布时间】:2018-06-01 04:17:56
【问题描述】:

我知道删除谓词的减法谓词从列表中删除项目列表

subtract([a,b,c,a,b], [a,c], X).

但是有没有类似的东西

remove([a,b,c,a,b], a, X).

我知道我可以在上面修改

subtract([a,b,c,a,b], [a], X).

达到预期的效果。

但我想知道是否还有其他方法?

编辑:

@user27815

您确实提供了非常详细的答案,但我对 prolog 还是很陌生。 也许我没有正确地问这个问题(我的错)。 如果有另一种方法可以实现这一点。它是预定义的还是我必须自己定义的。 我可以举个例子吗?

【问题讨论】:

  • 这听起来像是一个家庭作业问题,尤其是您添加的注释。在我们帮助您完成作业之前,我们通常会要求您展示您尝试过的内容。但是,是的,您可能应该自己定义它。
  • 我已经完成了我的作业。我只是在作业中添加一些额外的功能,只是为了挑战自己。仅此而已
  • 查找select/3delete/3

标签: list prolog


【解决方案1】:

当然,有很多方法。 一个很好的方法是使用库 reif。

通过重复查看此问题的答案:

Delete vowels in a list

定义了一些通用谓词,您可以适应您的程序。

remove(List,Element,NewList):-
     tinclude(not(list_memberd_truth([Element])),List,NewList). 

【讨论】:

  • 您能否通过一些示例交互来更新此答案,例如对于查询remove([a,b,c,a,b], a, WithoutA).remove([a,b,c,a,b], Element, [b,c,b]).remove([a,b,c,a,b], Element, WithoutElement).?