2014-12-03 47 views
3

我有我的代码在序言中的这个问题。如何在prolog中控制用户输入?

这是关于时尚造型师专家系统,从用户的属性,并给她指定的外观。

下面是代码:

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), 

但我怎么能强制用户输入正确的答案,所以程序将无法完成,直到用户输入正确的答案?

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

+0

我修改了我的答案以显示错误消息,您可以检查这种方法是否有效! – Ahmad 2014-12-04 14:37:24

回答

1

基本上,你可以验证每个输入与此模式:

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), 
... 

,但我会建议,而不是编写一个简单的菜单,像

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 

main_level(2):- 
    menu('Please enter weight ',['60s','50s'], W), 
    menu('Please enter tall ',['more than 160','less than 160'], T), 
    ... 
叫它
+0

这是非常有益的,谢谢 – 2014-12-08 10:30:50

1

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

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').