【问题标题】:Compare two lists with Prolog and collect the different elements in a different list用 Prolog 比较两个列表并收集不同列表中的不同元素
【发布时间】:2019-05-11 09:25:53
【问题描述】:

我是 Prolog 编程语言的新手,我正在尝试学习列表结构。我想将列表 A 与列表 B 进行比较,并找到 A 列表中不在 B 列表中的所有元素并写入列表 C。谢谢。

示例查询

match([a,b,c,d,e,f,g],[a,b,c],L3)

预期

L3=[d,e,f,g]

我能够比较两个列表并发现“真”为“假”。使用此代码。

match([Head|Tail], List2):-
    memberchk(Head,List2).
match([_|Tail],List2):-
    match(Tail,List2).

【问题讨论】:

    标签: prolog


    【解决方案1】:

    所以,有两种方法。第一个是编写自己的谓词:

    my_subtract([],_,[]):- !.
    my_subtract([H|T],B,[H|T1]):-
        \+member(H,B), !,
        my_subtract(T,B,T1).
    my_subtract([H|T],B,[H1|T1]):-
        member(H,B), !,
        my_subtract(T,B,[H1|T1]).
    
    test:-
        LA = [a,b,c,d,e,f,g],
        LB = [a,b,c],
        my_subtract(LA,LB,LO1),    
        writeln(LO1).
    
    ?- test.
    [d, e, f, g]
    

    否则,您可以在 SWI-Prolog 中使用谓词 subtract/3

    test:-
        LA = [a,b,c,d,e,f,g],
        LB = [a,b,c],
        subtract(LA, LB, LO),    
        writeln(LO).
    
    ?- test.
    [d, e, f, g]
    

    【讨论】:

      猜你喜欢
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多