从列表中删除/更新满足特定条件的所有列表

时间:2019-11-21 15:52:14

标签: prolog

我要从符合特定条件的列表中删除/更新所有列表。

示例(我想做什么):

列表:[ [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]].

,但结果始终为False。

我做错了什么?如何修改根据给定条件选择的列表?例如,假设我要保留包含“ a”的列表,但要从所有列表中删除“ a”,如下所示: 输入= [ [a,b,c], [x,y,z], [a,b], [b,a,c], [b] ],输出= [ [b,c], [x,y,z], [b], [b,c], [b] ]

1 个答案:

答案 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]]

希望这对您有所帮助。