ADPは、Prologからユニフィケーションとバックトラックを借りてきていますが、構文等については、皆様(というか私自身が)とっつきやすいように、普通の言語と同様にしています。
例えば、変数は$で始まるとか、文字列はクオート("や')で囲むとかはPrologとは違います。そのほかホーン節の定義も少し違うのですが、これは私が元としたPrologの方言から来ています。
また、何より決定的に違う面があるのですが、ADPには
・代入
・next述語によるバックトラック後に失敗せずに評価を続ける機能
があります。
代入は副作用を伴いますので、論理型言語であるPrologには代入がありません。しかし、プログラムを作成する上では代入は便利だと考え、ADPは代入をサポートしています。
また、Prologでは、バックトラックで全件を探索するにはfail述語を使い、最終的には失敗でプログラムが終了します。
これはこれでよいのかもしれませんが、ADPではnextという述語を用意し、失敗せずに全件探索を行うことができます。
Prologには、findall述語があり、この述語により全探索の結果をリスト化します。
ADPは代入とnext述語を用いて全探索結果のリスト化ができます。あくまでも私見ですが、代入とnext述語によりADPの方がより表現力が増しているかと思います。
next述語の説明
ADPですが、通常の言語をマスターした人にとって基本的にあまり難しいことを考えなくても良いように、Prologのエッセンス(よいところ)だけを引き出すようにデザインしています。