我对prolog非常困惑,它与我曾经使用的任何语言都有所不同(许多语言)我如何从中获取argv [0]:
current_prolog_flag(argv, Argv),
write(Argv).
现在,如果我尝试键入Argv [0]或Argv(0)或Argv< 0>它失败了..这让我没有任何线索和文档的帮助......似乎他们希望你已经是一个序幕专家:D
另一个问题是,如何将Argv [0]分配给变量,以便稍后使用“write”打印?
答案 0 :(得分:4)
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).
答案 1 :(得分: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