web-dev-qa-db-ja.com

prolog-変数の値を出力します

Xの値を出力する方法がわかりません。これが私がトップレベルで試したことです:

59 ?- read(X).
|: 2.
X = 2.

60 ?- write(X).
_G253
true.

とは _G253?インデックス番号は必要ありません。値Xがバインドされている必要があります。 Xの値を出力するにはどうすればよいですか?

15
Doopy Doo

インタラクティブプロンプトでwrite(X).と入力し、それ以外は何も入力しない場合、Xは特に何にもバインドされません。ユーザーからXを読み取ってから書き込む場合は、プロンプトでread(X), write(X).と入力してみてください。

?- read(X), write(X).
|: 28.
28
X = 28.

SWI Prologは、トップレベルのバインディングの履歴を保持します。タイプhelp.でマニュアルに移動し、bindingsを検索するか、マニュアルのセクション2.8「トップレベルのバインディングの再利用」に移動します。そこでは、成功したトップレベルの目標にバインドされた変数の最新の値が保持され、ドル記号が前に付いた変数の名前を使用して参照できることがわかります。したがって、次のような相互作用が可能です。

?- read(X).
|: 42.
X = 42.

?- write($X).
42
true.

ただし、変数名Xを使用するトップレベルの目標は、新しい変数を使用するものとして解釈されます。そうしないと、Prologの通常のセマンティクスに違反します。

prolog-入力として受け取り、変数の値を出力します。

go:- write('Enter a name'),nl,
  read(Name),nl,
  print(Name).
print(Name):- write(Name),write(', Hello !!!').
2
Mantu