2013-03-31 170 views
4

我很困惑与序言,这是对我用过的任何语言(多国语言)我如何去获得argv的方式不同[0]:解析命令行参数

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

现在如果我尝试键入Argv [0]或Argv(0)或Argv < 0>,它会失败..这使我无法从文档中找到任何线索和帮助。似乎他们希望您已经成为prolog专家:D

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

回答

4

Prolog使用匹配。

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

这一列表相匹配具有头部和尾部:

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

您可以使用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(索引,目录,元件)的使用如下:

% 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