io – 用Prolog输出任何字符串输入

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

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

如果用户输入Bob,则会引发错误.但如果用户输入“Bob”,则有效.或’鲍勃’.

ERROR: format/2: Illegal argument to format sequence ~s: _G7118

我也尝试用writeq替换格式,如:

hello(_) :-
  write('\nEnter Name: '),
  read(Name),
  writeq(Name).

哪个不会抛出错误,但最终会打印_L143而不是Bob

最佳答案 (评论太长)

不要像@lurker解释的那样使用这样的读取,它不是用于输入“字符串”或“文本”或完全回答问题.在走这条路之前,问问自己:“为什么?”

Prolog顶级是您的交互式命令行提示符.它与C或任何其他编译语言不同,您需要实际制作翻译.

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

hello(Name) :-
    format("~w~n", [Name]).

当然,你仍需要在提示符下打个招呼(“Bob”)或打招呼(‘Bob’).

如果你想在Prolog顶层创建自己的翻译,这完全是另一回事.

点赞