1

私はサブセット関数の作成に取り組んでおり、それを行うことに成功しました。メンバー関数を実装する私の関数は次のとおりです。

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

 subset([], _).
 subset([H|T1], T2) :-
    member(H, T2),
    subset(T1, T2). 
 subset([H1|T1], [H2|T2]) :-
    \+ member(H1, T2),
    subset([H1|T1], T2).

私の質問は、もちろんメンバー関数を使用してこの関数を書くためのより良い方法があるかどうかです。

4

1 に答える 1

2

の 3 番目の句はsubset/3意味がなく、削除する必要があると思います。H1が のメンバーでない場合T2、再帰呼び出しsubset([H1|T1], T2)も明らかに成功しません。

それを除けば、最初の 2 つの節が適切なようです。

于 2012-12-18T18:14:42.890 に答える