2012-10-16 14 views
0

我是using a predicate在prolog程序shell中读取连续提示中的一些值,并且我希望用户在询问输入时能够获得帮助消息。该方案将是:序言:在shell提示符下显示帮助

  1. 请输入
  2. 如果input = 'help',显示帮助信息,并要求对同一输入再次
  3. 如果input /= 'help',分配Value并成功留下

我”什么至今已完成:

ask_input(Question, Value) :- 
    write(Question), % Please enter ... : 
    read(ReadValue), 
    (ReadValue = 'help' -> 
     write('Help message...'), 
     ask_input(Question, Value) 
    ; Value = ReadValue 
    ). 

显然,t他上面的代码不起作用。它会在条件内的ask_input上失败。

回答

0

我这样做,它似乎工作:

ask_question(Question, Value) :- 
    write(Question), nl, 
    read(ReadValue), 
    ask_question2(Question, ReadValue, NewValue), 
    Value = NewValue. 

ask_question2(Question, ReadValue, NewValue) :- 
    ReadValue = 'help', 
    write('Help message ...'), nl, 
    ask_question(Question, NewValue). 

ask_question2(_, Value, Value). 
+0

我会写'ask_question2(问题,帮助的NewValue): - '然后删除'ReadValue =“help''线。 –

+2

请注意,在backtracking时,ask_question2/3的第二个子句将成功ReadValue ='help'。 – gusbro

+0

更多我想,我认为这种方法可以被简化得更多,并且通过接受输入然后处理它可以避免这个问题。 '帮助'功能只是一个处理程序。默认处理程序将显示错误,并可能显示“帮助”消息。构建你的输入循环,而不是试图处理无效输入和更深层次的帮助。 –