我试图从列表列表中删除元素。这是我尝试做的一个例子:
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).
答案 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%的方式。是时候吃面条了。