Разбор на аргументи на командния ред

Много съм объркан с prolog, той е много различен от всеки език, който някога съм използвал (много езици) Как да получа argv[0] от:

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

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

Друг въпрос, как да присвоя Argv[0] на променлива, за да мога да я отпечатам по-късно с помощта на "write"?


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


Отговори (2)


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).
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(Индекс, Списък, Елемент) се използва, както следва:

% 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