18

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

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

60 ?- write(X).
_G253
true.

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

4

2 に答える 2

21

対話型write(X).プロンプトで何も入力しない場合、X は特に何にもバインドされません。ユーザーから X を読み取ってから書き込みたい場合はread(X), write(X).、プロンプトで入力してみてください。

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

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

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

?- write($X).
42
true.

しかし、たまたま変数名 X を使用している最上位の目標は、新しい変数を使用していると解釈されます。そうしないと、Prolog の通常のセマンティクスに違反します。

于 2012-10-17T17:03:53.447 に答える