我的问题是:
编写一个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)。
我做错了什么?
答案 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].