Prolog如何从列表列表中删除

时间:2017-11-15 01:20:49

标签: list prolog

我试图从列表列表中删除元素。这是我尝试做的一个例子:

List=[[1,2],[1,3],[4,2]]
Max=2
delete(List,[_|Max],List2)
List2=[[1,3]]

说明:给定List我尝试使用delete / 3删除每个元素Max作为其子列表中的第二个元素。我不确定标准的delete / 3谓词是否可行。谢谢你的帮助!

这是我迄今为止对我自己的谓词所尝试过的。我意识到这不起作用,不会做我想做的事。

second_element(E, []).
second_element(E,L):-
   member(X,L),
   X==[_,E],
   delete(L,X,L2),
   second_element(E,L2).

1 个答案:

答案 0 :(得分:0)

我不会只给你答案。但是我可以给你一个Prolog常用的模式。这加上我在评论中提供的提示是解决问题所需的所有工具。

如果您有一个列表L,并且您希望另一个列表RL省略L符合特定条件的元素,那么这是一个共同的处理递归模式:

filtered_list([], []).     % The empty list is a filtered version of the empty list

filtered_list([H|T], R) :-
    (   meets_criteria_for_omission(H)
    ->  R = RT                 % R will not have H if it meets criteria for omission
    ;   R = [H|RT]             % R will have H if it does not meet criteria for omission
    ),
    filtered_list(T, RT).

在原始问题的情况下,遗漏的标准是被检查的元素是给出第二个元素的列表。这意味着必须将被检查的元素作为参数提供。要检查的标准是它是否是给定列表的第二个元素。

这是我能提供的尽可能多的信息,而不是简单地交出完整的答案,但它是85%的方式。是时候吃面条了。