【问题标题】:Remove / update all lists from a list that meet a certain criterion从列表中删除/更新满足特定条件的所有列表
【发布时间】:2019-11-21 15:52:14
【问题描述】:

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

示例(我想做的):

列表:[ [a,b,c], [x,y,z] [a,b], [b,a,c], [b] ]

标准:不包含a。 结果:[[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 调试器进行操作时,我看到相应的列表已被删除。然而,结果总是 False,虽然我期待 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] ]

【问题讨论】:

    标签: prolog


    【解决方案1】:

    答案比你想象的要简单。

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

    希望这对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-11-02
      • 2011-11-16
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 2014-05-22
      • 2017-09-27
      • 2016-03-24
      • 2022-08-24
      相关资源
      最近更新 更多