3

我正在研究一个接受两组并返回它们交集的函数。但是,我不想在我的代码中使用成员函数。这是成员函数:

member( X, [ X | T ] ).
member( X, [ _ | T ] ) :- member( X, T ).

这是我到目前为止所拥有的:

     set_int(_,[],_).   
     set_int([H|T],[H|T1],[H|T2]) :-
           set_int(T,T1,T2).
     set_int(T,[X|T1],T2) :-
           set_int(T,T1,T2). 

请帮助我的逻辑。

4

2 回答 2

1

如果你写set_int来处理第一个术语的 3 种情况(一个空列表、一个元素列表和比这更长的列表),你可以有效地set_int( [A], B, [A] )使用member( A, B ).

于 2012-12-19T01:02:43.067 回答
0

我认为只有在订购了您的套装时,您才能处置成员(或同等人员)。有了这样的假设,我们可以只比较正面:

set_int([X|Xs], [Y|Ys], Is) :-
    X @< Y,
    !, set_int(Xs, [Y|Ys], Is).
set_int([X|Xs], [Y|Ys], Is) :-
    X @> Y,
    !, set_int([X|Xs], Ys, Is).
set_int([Z|Xs], [Z|Ys], [Z|Is]) :-
    !, set_int(Xs, Ys, Is).
set_int(_, _, []).
于 2012-12-19T07:01:45.290 回答