Prolog 在读写命令中给出随机数而不是字符串

0 prolog

say_hi:-
    write('Your name? '),
    read(X),
    write('hi'),
    write(X).
Run Code Online (Sandbox Code Playgroud)

这是我的代码但是!!!当我运行它时就会发生这种情况。为什么?

?- say_hi.
Your name? Ali.
hi_884
true.
Run Code Online (Sandbox Code Playgroud)

这不是给予

> hi Ali

Run Code Online (Sandbox Code Playgroud)

。为什么?

请指导我并给我简单的代码来读取和写入名称。每次输入不同的名称都会给出不同的数字。

Cap*_*liC 5

发生这种情况是因为 read/1 旨在解析Prolog 术语,而以大写字母开头的字母序列是一个变量。按照惯例,奇怪的输出是 Prolog 显示未实例化_NNN变量的方式。在 SWI-Prolog 中,您可以使用read_line_to_codes/2或 read_line_to_string/2 来获取字符串。例如

?- read_line_to_string(user_input,S).
|: Ali
S = "Ali".
Run Code Online (Sandbox Code Playgroud)