Как получить текущий рабочий каталог
Я новичок в 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
У меня есть два вопроса:
- Где я могу найти мета-документацию по
-
,?
, а также+
которые появляются перед формальными аргументами вyap
документация? - Как мне получить текущий рабочий каталог?
ОБНОВЛЕНИЕ: следующее также терпит неудачу:
$ 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 ответ
Мета-документация может быть найдена в руководстве по SWI-Prolog здесь, но будет такой же для Yap (не удалось найти какую-либо ссылку в руководстве по Yap для краткой записи).
Текущий рабочий каталог (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 будет предыдущим рабочим каталогом.