2

私は、Prolog と、それがどのように統合を処理するかについての理解を深めようとしています。この場合、リストとの統合をどのように処理するか。

これは私の知識ベースです。

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

プロセスを正しく理解している場合。が true でない場合member(X, [X|_])は再帰規則に移動し、XlistTにある場合[_|T]は に統合されTます。

では、再帰述語の無名変数はどうなるでしょうか? 廃棄されますか?[_|T]1 つではなく 2 つの変数であるため、リストを使用した正確な統合プロセスを理解するのに苦労しています。統一プロセスがリストで正確にどのように機能するかを理解しようとしています。

4

4 に答える 4

1

[A|B]A が Head 要素で、B が残りのリスト全体であるリストを表します。

アルゴリズムを簡単に説明すると、次のようになります。

  1. 句: X がリストの最初の要素である場合、述語は成功します。
  2. 句: そうでない場合は、リストの最後にある X を見つけようとします。したがって、メンバーを再帰的に呼び出しますが、リスト全体を渡す代わりに、ヘッド要素を除いてリストを渡します。言い換えれば、最初に head 要素を常に見て、リストを段階的に見ていきます。それが私たちの要素でない場合は、さらに掘り下げます。

匿名変数は、_後で必要ない変数と考えてください。_大文字に置き換えてもアルゴリズムは機能しますが、決して使用しない変数に名前を付けたという警告が表示されます。

于 2015-01-26T17:02:03.413 に答える