用 Prolog 输出任意字符串输入

5 io prolog

检查是否可以使用基本模型序言(无模块)可靠地格式化字符串。我有以下代码,我认为可以工作,但没有:

hello(_) :-
  write('\nEnter Name: '),
  read(Name),
  format('\nThe name you entered is: ~s', [Name]).
Run Code Online (Sandbox Code Playgroud)

如果用户输入,这会引发错误,Bob.但如果用户输入"Bob".'Bob'.

ERROR: format/2: Illegal argument to format sequence ~s: _G7118
Run Code Online (Sandbox Code Playgroud)

我也尝试过用writeq以下格式替换格式:

hello(_) :-
  write('\nEnter Name: '),
  read(Name),
  writeq(Name).
Run Code Online (Sandbox Code Playgroud)

这不会引发错误,但只是最终打印_L143而不是Bob

小智 3

(太长了,无法评论)

不要read像这样使用,正如 @lurker 所解释的那样,它不是用于输入“字符串”或“文本”或问题的答案。在走这条路之前,问问自己:“为什么?”

Prolog 顶层是交互式命令行提示符。它不像 C 或任何其他编译语言,您需要实际创建解释器。

所以,你的hello/1可能看起来像这样:

hello(Name) :-
    format("~w~n", [Name]).
Run Code Online (Sandbox Code Playgroud)

当然,您仍然需要根据提示说出hello("Bob")“或” 。hello('Bob')

如果你想在 Prolog 顶层创建你自己的解释器,这完全是另一回事。