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 确实保留了顶级绑定的历史;键入help.进入手册,然后搜索bindings或导航到手册的第 2.8 节“顶层绑定的重用”。在那里,您可以了解到绑定在成功的顶级目标中的任何变量的最新值都将被保留,并且可以使用以美元符号为前缀的变量名称来引用。所以像下面这样的交互是可能的:

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

?- write($X).
42
true.

但是恰好使用变量名 X 的顶级目标将被解释为使用新变量;否则会违反 Prolog 的正常语义。

于 2012-10-17T17:03:53.447 回答
3

prolog - 作为输入并打印变量的值。

go:- write('Enter a name'),nl,
  read(Name),nl,
  print(Name).
print(Name):- write(Name),write(', Hello !!!').
于 2018-02-12T09:33:46.057 回答