最後の要素に確定性がある 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..
以前と同じように動作するはずです。
さよなら