首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在prolog中控制用户输入?

如何在prolog中控制用户输入?
EN

Stack Overflow用户
提问于 2014-12-03 14:04:31
回答 2查看 483关注 0票数 3

我在prolog中的代码有这个问题。

它是关于时尚设计师专家系统,从用户那里获取属性并给她指定的外观。

以下是代码:

代码语言:javascript
运行
复制
main_level(2):- 
    write('Please enter weight (60s (1), 50s (2)): '), read(W),
    write('Please enter tall (more than 160 (1), less than 160 (2)): '), read(T),
    write('Please enter skin color (bronze (1), white (2), black (3)): '), read(S1),
    write('Please enter hair length (medium (1), short (2), long (3)): '), read(H1),
    write('Please enter hair color (brown (1), black (2), blond (3)): '), read(H2),
    write('Please enter event (wedding (1), fami party (2): '), read(E),

但是我怎样才能强迫用户输入正确的答案,这样程序才能完成,直到用户输入正确的答案?

我试图通过使用递归规则来完成它,但是它也没有工作!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-03 14:43:19

基本上,您可以使用此模式验证每个输入:

代码语言:javascript
运行
复制
main_level(2):- 
    repeat, write('Please enter weight (60s (1), 50s (2)): '), read(W), (W == 1 ; W == 2),
    repeat, write('Please enter tall (more than 160 (1), less than 160 (2)): '), read(T), (T == 1 ; T == 2),
...

但是我建议编写一个简单的菜单,比如

代码语言:javascript
运行
复制
menu(Header, Choices, Choice) :-
  repeat,
  write(Header),
  forall(nth1(I,Choices,Value), format('~w (~d) ', [Value,I])),
  read(C),
  nth1(C, Choices, _). % validate index input

然后用它

代码语言:javascript
运行
复制
main_level(2):- 
    menu('Please enter weight ',['60s','50s'], W),
    menu('Please enter tall ',['more than 160','less than 160'], T),
    ...
票数 1
EN

Stack Overflow用户

发布于 2014-12-03 14:43:35

您可以测试答案是否等于预期值,如果规则没有失败,则可以使用!)在此检查之后,如下面所示显示错误消息。

代码语言:javascript
运行
复制
main_level(2):- 
write('Please enter weight (60s (1), 50s (2)): '), 
read(W), (W == 1; W == 2),!,...

main_level(2):- write('Please enter a value according to the menu').
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27273700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档