检查是否可以使用基本模型序言(无模块)可靠地格式化字符串。我有以下代码,我认为可以工作,但没有:
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 顶层创建你自己的解释器,这完全是另一回事。