我要从符合特定条件的列表中删除/更新所有列表。
示例(我想做什么):
列表:[ [a,b,c], [x,y,z] [a,b], [b,a,c], [b] ]
条件:不包含。
结果:[[x,y,z], [b]].
我尝试过的:
criterion(A, L, Small_List):-
member(Small_list,L), member(A,Small_list).
remove_lists(A,L,L1):-
criterion(A,L, Small_List), select(Small_List,L,Q), remove_lists(A, Q, L1).
当我尝试trace, remove_lists(a, [ [a,b,c], [x,y,z] [a,b], [b,a,c], [b] ], L1).
并遵循GUI调试器时,我看到相应的列表已删除。但是,尽管我一直期望L1 = [[x,y,z], [b]].
我做错了什么?如何修改根据给定条件选择的列表?例如,假设我要保留包含“ a”的列表,但要从所有列表中删除“ a”,如下所示:
输入= [ [a,b,c], [x,y,z], [a,b], [b,a,c], [b] ]
,输出= [ [b,c], [x,y,z], [b], [b,c], [b] ]
答案 0 :(得分:0)
答案非常简单。
remove_list(a,[],[]).
remove_list(a,[H|T],SmallList):- member(a,H) , remove_list(a,T,SmallList).
remove_list(a,[H|T],[H|SmallList]):- \+member(a,H) , remove_list(a,T,SmallList).
输出
?-remove_list(a,[ [a,b,c], [x,y,z], [a,b], [b,a,c], [b] ],Z).
Z= [[x, y, z], [b]]
您可以灵活地执行代码,就像也将条件作为输入一样。
remove_list(,[],[]).
remove_list(X,[H|T],SmallList):- member(X,H) , remove_list(X,T,SmallList).
remove_list(X,[H|T],[H|SmallList]):- \+member(X,H) , remove_list(X,T,SmallList).
输出
?-remove_list(b,[ [a,b,c], [x,y,z], [a,b], [b,a,c], [b] ],Z).
Z = [[x, y, z]]
?-remove_list(x,[ [a,b,c], [x,y,z], [a,b], [b,a,c], [b] ],Z).
Z = [[a, b, c], [a, b], [b, a, c], [b]]
希望这对您有所帮助。