以前の質問の回答とコメントを読んでいて、Bratko (人工知能のプロローグ プログラミング、p. 130) の例に与えられた説明を適用しようとしましたが、完全に理解しているかどうかはわかりません。以下に例を示します。
ツリーとコードを次のように読みました。
目標リストでは、C :- P, Q, R, !, S, T, U.
Prolog は通常どおり変数を 1 つずつインスタンス化して、最終的に に到達しようとしますtrue.
。P
との値が見つかりQ
、最初の試行がR
失敗した場合、Prolog はP
とが見つかったケースに戻り、可能であればQ
別のオプションを試すことができます。R
ただし、 もR
見つかって ( につながるP, Q, R = true.
)、!
いつものように成功した場合は、選択ポイントを破棄し、その時点から ( さえも) 戻るものは何もありませんC :- V.
。これが意味することは、 の結果が見つからない場合S
、ゴールC :- P, Q, R, !, S, T, U.
はすぐに失敗するということです。しかし、 PrologはまだバックトラックできますA :- B, C, D.
の他の値を見つけるB
。に別の一致が見つかった場合はB
、C
もう一度再試行されます。等々。
私の解釈が正しいと仮定すると、C :- P, Q, R, !, S, T, U.
の値に関係なく目標が成功または失敗した場合B
、どのように効率を改善しますか? 私の推測では、 のように書き直しA :- B, C, D.
ますA :- B, !, C, D
。
私の解釈は正しいですか?そして、いくつかの先験的な情報が与えられた場合、効率の改善についてはC
どうですか?