【问题标题】:Prolog: display help on a shell promptProlog:在 shell 提示符下显示帮助
【发布时间】:2012-10-16 11:42:59
【问题描述】:

我是using a predicate,在 prolog 程序 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
    ).

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

【问题讨论】:

    标签: input prolog swi-prolog


    【解决方案1】:

    我这样做了,它似乎有效:

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

    【讨论】:

    • 我会写 ask_question2(Question, help, NewValue) :- 然后删除 ReadValue = 'help' 行。
    • 请注意,ask_question2/3 的第二个子句在 ReadValue = 'help' 回溯时会成功。
    • 我想得越多,我就越认为这种方法可以简化,并且通过获取输入然后处理它来避免问题。 “帮助”功能只是一个处理程序。默认处理程序将显示错误,并可能显示“帮助”消息。围绕它构建输入循环,而不是尝试处理无效输入并在更深层次上提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    相关资源
    最近更新 更多