consult/1やreconsult/1でファイルからソースプログラムを
読み込むときは、読み込んだ文字列をparse_atomして、第三
引数のVarlistをヒープ領域に、変数名と定義した節構造の
中の変数Idのペア、として登録します。
ユーザがreadしてからassertする場合は、処理系によります。
assertz_with_namesのようなVarlist処理をオプションに
持った処理系の場合は,
?- ... read_with_names(P,V),assertz_with_name(P,V), ...
としておくことで、後にユーザが指定したかった変数名を
あくまで字面だけの問題ではありますが、「復元」するこ
とができます。
このようなオプションがあれば、より高度なインタプリタを
構築したり、マクロ処理を取り入れる場合には、この復元
を使うことによって、使い易い、分かりやすい、インタブリタ
やデバッガを作成することができます。
しかし、これらのことはあくまで変数を表示する際の「字面」
だけの問題であり、Prolog実行時のユニフィケーションに
よる、スタックの書き換え処理では、そのすべてが無機的な
変数Idの単一化だけで処理されている、ということを理解
する必要があります。