Разбор аргументов командной строки

Я очень запутался с прологом, он сильно отличается от любого языка, который я когда-либо использовал (много языков). Как мне получить argv[0] из:

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

Теперь, если я попытаюсь ввести Argv[0] или Argv(0) или Argv‹0>, это не удастся.. это оставляет меня без подсказки и очень мало помощи из документации.. кажется, что они ожидают, что вы уже будете прологом эксперт :D

Другой вопрос, как мне назначить Argv[0] переменной, чтобы я мог распечатать ее позже, используя «запись»?


person ace007    schedule 31.03.2013    source источник


Ответы (2)


Пролог использует сопоставление.

?- 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'

Чтобы получить справку о таких функциях, как append:

apropos(append).
person User    schedule 31.03.2013

Вы можете использовать предикаты 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
person code_x386    schedule 09.02.2016