4

最後の要素に確定性がある member/2 をコーディングするにはどうすればよいですか。現在私は使用しています:

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

次のクエリを実行すると:

?- member(X,[1,2]).
X = 1 ;
X = 2 ;
No

まだ選択肢が残っているので、インタプリタは 2 を返した後も検索を続けます。これがもう起こらないようにするにはどうすれば member/2 を実装できますか?

しかし、member/2 の完全なセマンティクスは保持する必要があります。つまり、次のような回答です。

 ?- member(X,Y)
 Y = [X|_1] ;
 Y = [_1,X|_2] ;
 etc..

以前と同じように動作するはずです。

さよなら

4

1 に答える 1

3
member(B, [C|A]) :-
    member_(A, B, C).
member_(_, A, A).
member_([C|A], B, _) :-
    member_(A, B, C).

swiでの2つのリスト呼び出しの結果です。

于 2011-12-08T20:37:21.037 に答える