我在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),但是我怎样才能强迫用户输入正确的答案,这样程序才能完成,直到用户输入正确的答案?
我试图通过使用递归规则来完成它,但是它也没有工作!
发布于 2014-12-03 14:43:19
基本上,您可以使用此模式验证每个输入:
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),
    ...发布于 2014-12-03 14:43:35
您可以测试答案是否等于预期值,如果规则没有失败,则可以使用!)在此检查之后,如下面所示显示错误消息。
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').https://stackoverflow.com/questions/27273700
复制相似问题