【问题标题】:Parsing command line arguments解析命令行参数
【发布时间】:2013-03-21 11:28:45
【问题描述】:

我对 prolog 感到非常困惑,它与我曾经使用过的任何语言(许多语言)都不同我如何从以下位置获取 argv[0]:

current_prolog_flag(argv, Argv),
write(Argv).

现在,如果我尝试输入 Argv[0] 或 Argv(0) 或 Argv,它会失败..这让我一无所知,文档帮助也很少.. 似乎他们希望你已经成为序言专家:D

另一个问题,我如何将 Argv[0] 分配给一个变量,以便稍后使用 "write" 打印它?

【问题讨论】:

    标签: swi-prolog


    【解决方案1】:

    Prolog 使用匹配。

    ?- current_prolog_flag(argv, [File | Rest]).
    File = 'C:\\Program Files\\pl\\bin\\swipl-win.exe',
    Rest = ['--win_app'].
    

    这匹配一个有头部和尾部的列表:

    [Head | Tail]
    

    Head 是第一个元素,Tail 是列表的其余部分。

    要获取最后一个元素,请使用:

    ?- current_prolog_flag(argv, Argv), append(_, [Last], Argv).
    Argv = ['C:\\Program Files\\pl\\bin\\swipl-win.exe', '--win_app'],
    Last = '--win_app'
    

    要获得有关附加功能的帮助:

    apropos(append).
    

    【讨论】:

      【解决方案2】:

      您可以使用 nth0 和 nth1(与 nth0 相同,但从 1 而不是 0 开始计算元素)谓词:

      current_prolog_flag(argv, Argv),
      nth0(0, Argv, Argument0), % get first argument
      nth0(1, Argv, Argument1), % get second argument
      write(Argument0).
      

      nth0(Index, List, Element) 最常见的用法如下:

      % get element by index
      nth0(1, [a, b, c, d], E) % E = b
      
      % get index by element
      nth0(I, [a, b, c, d], b) % I = 1
      
      % enumerate elements with their corresponding indexes
      List = [a, b, c, d],
      forall(nth0(I, List, E), format('List[~w]=~w~n', [I, E])).
      % example above prints    
      List[0]=a
      List[1]=b
      List[2]=c
      List[3]=d
      

      【讨论】:

        猜你喜欢
        • 2012-01-26
        • 2011-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多