小编and*_*ier的帖子

两个列表的交集和联合

我开始学习prolog(我使用SWI-prolog),我做了一个简单的练习,其中我有2个列表,我想计算他们的交集和联合.这是我的代码工作得很好,但我问自己是否有更好的方法,因为我不喜欢使用CUT运算符.

intersectionTR(_, [], []).
intersectionTR([], _, []).
intersectionTR([H1|T1], L2, [H1|L]):-
    member(H1, L2),
    intersectionTR(T1, L2, L), !.
intersectionTR([_|T1], L2, L):-
    intersectionTR(T1, L2, L).

intersection(L1, L2):-
    intersectionTR(L1, L2, L),
    write(L).


unionTR([], [], []).
unionTR([], [H2|T2], [H2|L]):-
    intersectionTR(T2, L, Res),
    Res = [],
    unionTR([], T2, L),
    !.
unionTR([], [_|T2], L):-
    unionTR([], T2, L),
    !.

unionTR([H1|T1], L2, L):-
    intersectionTR([H1], L, Res),
    Res \= [],
    unionTR(T1, L2, L).
unionTR([H1|T1], L2, [H1|L]):-
    unionTR(T1, L2, L).

union(L1, L2):-
    unionTR(L1, L2, L),
    write(L).
Run Code Online (Sandbox Code Playgroud)

请记住,我想只有1个结果,而不是多个结果(即使是正确的),所以运行代码:

?- intersect([1,3,5,2,4] …
Run Code Online (Sandbox Code Playgroud)

list prolog

6
推荐指数
2
解决办法
3万
查看次数

标签 统计

list ×1

prolog ×1