我需要编写一个读取用户输入的谓词。如果输入为“yes”(理想情况下为“yes”或“y”),则必须为参数分配“yes”,如果有任何不同,则必须分配“no”。
askContinue(Answer) :-
write("Would you like to continue ? "), read(Input), nl,
(Input = "yes" -> Answer = true ; Answer = false).
Run Code Online (Sandbox Code Playgroud)
输出是:
?- askContinue(A).
Would you like to continue ? yes.
A = false.
?- askContinue(A).
Would you like to continue ? no.
A = false.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么 ?
你做错的是你正在将你读取的原子read
与字符串进行比较。相反,将其与原子进行比较(单引号或无引号):
askContinue(Answer) :-
write("Would you like to continue ? "), read(Input), nl,
(Input = yes -> Answer = true ; Answer = false).
Run Code Online (Sandbox Code Playgroud)
您可以使用其他东西来代替read
。也许您不想.
在回答后输入“”。如果您阅读直到按下 Enter 键:
ask(Prompt, Answer) :-
prompt1(Prompt),
read_string(current_input, "\n", " \t", _Sep, Response),
response_answer(Response, Answer).
response_answer(Response, Answer) :-
string_lower(Response, R),
( memberchk(R, ["y", "yes"])
-> Answer = yes
; Answer = no
).
Run Code Online (Sandbox Code Playgroud)
这将正确识别“是”、“是”、“y”、“Y”等。
?- ask("Would you like to continue? ", Answer).
Would you like to continue? Y
Answer = yes.
?- ask("Would you like to continue? ", Answer).
Would you like to continue? Yeah
Answer = no.
Run Code Online (Sandbox Code Playgroud)