X
要素がリストに属しているかどうかをチェックするこの簡単なプログラムがあります。
member2(X, [X|_]).
member2(X,[_|T]):- member2(X,T).
私はそれを拡張された形式で書こうとしています (以前の方法では動作があまり明確ではないため)。ということで、以下のように書きました。
member2(X, [X|_]).
member2(X,Y):- Y = [_|T],
member2(X,T).
したがって、意味はより明確です。
基本ケースを表すファクトが 1 つあります (X
要素がリストの先頭にある場合、その要素はリストに属します)。
規則では、次の 2 つのことを証明する必要があります。
1) Y = [_|T]
. これは、無名変数が_
何とでも統一されるためです。
X
2)末尾のリストの要素を再帰的に検索します。
わかりました、私の推論は正しいと思いますが、このプログラムの 2 番目のバージョンは機能しません! Y = [_|T]
おそらく問題はセクションにあると思います