Prolog添加元素

时间:2018-06-10 18:29:45

标签: prolog

我的问题是:

  

编写一个Prolog程序,给出两个列表L1和L2   ,产出   两个新列表L3和L4   这样L3包含了元素   L1也属于L2   ,而L4包含元素   不属于L2的L1   。你可以使用内置的   谓词成员。   例如,查询listmem([a,r,t],[t,s,m,n,a],L3,L4)   产生L3 = [a,t]和L4 = [r]。

现在我的解决方案是:

memberOf([], [], _).
memberOf([H|T], L2, [X|Xs]) :-
   X is H,
   member(X, L2),
   memberOf(T, L2, Xs).

但是当我测试以下输入时,它返回no ..

  

memberOf([1,2,3],[2,3,4],L3)。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

listmem(L1,[],[],L1).
listmem([],_,[],[]).
listmem([H1|T1],L2,[H1|L3],L4):-
    member(H1,L2), !,
    listmem(T1,L2,L3,L4). 
listmem([H1|T1],L2,L3,[H1|L4]):-
    listmem(T1,L2,L3,L4).    

我在第三个案例中添加了一个剪辑而不是\+ member(H1,L2)到最后一个案例,因此您可以使用listmem“其他方式”,例如,而不是:

?- listmem([a, r, t], [t, s, m, n, a], L3, L4).
L3 = [a, t],
L4 = [r].

你也可以:

?- listmem([a, r, t], L2, [a,t], L4).
L2 = [a, t|_G10554000],
L4 = [r].