最近では、C++にも導入が検討されているガベージコレクションですが、
なんとADPには実装していません。で、
『どうやってメモリ管理しているのか?』
という疑問が沸くかと思いますが、普通にスタックを使用しています。
細かいことを言いますと、正確には述語の評価を行うクラス内で作成(new)したオブジェクトを記録し、そのクラスのデストラクタで解放(delete)しています。評価結果を伝達する場合はオブジェクトをコピーします。深いコピーを行うので配列等は結構時間がかかります。
ガベージコレクションを実装しない理由ですが、ADP(Prolog)の実行環境(インタプリタ)はスタックで実装できるのでガベージコレクションをする必要がないということが1つ。
もうひとつの理由はパフォーマンスで、どのような実装方法を用いても、今日の大容量メモリで動作する場合、一度ガベージコレクタが動くとどうしても動作が遅くなるだろうと思います。
64ビット時代でさらに大容量のメモリが搭載される場合、ちまちまガベージコレクションするよりも贅沢にメモリを使ったとしても許されるかな?というもくろみもあります。