Как получить текущий рабочий каталог

Я новичок в yap (и с Прологом в целом), и я не могу понять, как получить текущий каталог.

На самом деле, я не могу разобраться в документации:

working_directory(-CurDir,?NextDir)

Получить текущий каталог в CurDir, Если NextDir связан с атомом, сделайте его значение текущим рабочим каталогом.

Я не понимаю, что подразумеваетсяпод CurDir".

Кроме того, я не могу найти документацию по - а также ? предшествуя формальным аргументам. (Я думаю, что ? означает, что аргумент не является обязательным, но я понятия не имею о -.)

В итоге, я не могу понять, как использовать эту информацию для запроса текущего рабочего каталога.


Я перепробовал много слепых догадок, и всегда получаю либо no. или ошибка в ответе. Например:

$ yap
% Restoring file /usr/lib/Yap/startup.yss
YAP 6.2.2 (x86_64-linux): Sat Nov 23 17:51:47 UTC 2013
   ?- working_directory(CurDir).
no
   ?- working_directory(-CurDir).
no
   ?- working_directory().
     SYNTAX ERROR at user, near line 7:
 working_directory(
<==== HERE ====>
 ).
   ?- working_directory.
no
   ?- CurDir.
     ERROR!!
     INSTANTIATION ERROR- meta_call(_131099): expected bound value
   ?- -CurDir.
no
   ?- working_directory('.').
no
   ?- working_directory(-'.').
no

У меня есть два вопроса:

  1. Где я могу найти мета-документацию по -, ?, а также + которые появляются перед формальными аргументами в yap документация?
  2. Как мне получить текущий рабочий каталог?

ОБНОВЛЕНИЕ: следующее также терпит неудачу:

$ yap
% Restoring file /usr/lib/Yap/startup.yss
YAP 6.2.2 (x86_64-linux): Sat Nov 23 17:51:47 UTC 2013
   ?- working_directory(X, '').
no
   ?- working_directory(X, X).
no

1 ответ

  1. Мета-документация может быть найдена в руководстве по SWI-Prolog здесь, но будет такой же для Yap (не удалось найти какую-либо ссылку в руководстве по Yap для краткой записи).

  2. Текущий рабочий каталог (CWD) можно получить так:

working_directory(X,'').

... что означает объединить X с CWD и заменить его ничем (нелогично, я знаю, но я этого не сделал) или:

working_directory(X,X).

... как указал @PauloMoura, что означает объединить X с CWD и изменить его на себя (что также кажется мне странным, но c'est la vie).

CWD можно изменить так:

working_directory(X,'Some New Directory').

... который объединит X с CWD, затем изменит CWD на "Some New Directory", поэтому X будет предыдущим рабочим каталогом.

Другие вопросы по тегам