解析命令行参数

ace*_*007 4 swi-prolog

我对 prolog 很困惑,它与我曾经使用过的任何语言(多种语言)都不一样,我如何从以下位置获取 argv[0]:

current_prolog_flag(argv, Argv),
write(Argv).
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试输入 Argv[0] 或 Argv(0) 或 Argv<0> 它会失败..这让我没有任何线索,文档也几乎没有帮助..似乎他们希望你已经是序言专家:D

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

Use*_*ser 5

Prolog 使用匹配。

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

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

[Head | Tail]
Run Code Online (Sandbox Code Playgroud)

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

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

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

要获取有关 append 等函数的帮助:

apropos(append).
Run Code Online (Sandbox Code Playgroud)