4
最後の 要素の決定性を持つmember/2をどのようにコード化できますか?現在、私は使用しています:いくつかの決定性のあるメンバー/ 2のコード
member(X,[X|_]).
member(X,[_|Y]) :- member(X,Y).
を、私は、次のクエリを実行すると:
?- member(X,[1,2]).
X = 1 ;
X = 2 ;
No
インタプリタはまだ選択肢ポイント残っている2 ので、帰国後に検索を続行します。メンバー/ 2 を実装するにはどうしたらいいですか?
しかし、メンバー/ 2の完全なセマンティックが保存されなければならない、すなわちなど 答え:
?- member(X,Y)
Y = [X|_1] ;
Y = [_1,X|_2] ;
etc..
はまだbeforとして動作するはずです。
他の述語に波及します。メンバーが最後の要素に対して決定的である場合、メンバーを使用する他の述部もまたより決定論的になります。 Prologインタプリタは、環境をトリミングしてガベージコレクションを実行できるため、決定性は良好です。 –
あなたはswi plのメンバー/ 2を見ることができるようです、それは最後の要素で決定論的です。 – m09