2017-02-22 23 views
0

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

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

working_directory(-CurDir,?NextDir)

Fetch текущего каталога на 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. Как получить текущий рабочий каталог?

UPDATE: Ниже также не:

$ 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 

ответ

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

  2. Текущий рабочий каталог (УХО) может быть получен следующим образом:

working_directory(X,'').

... что означает унификацию X с ВПЦ и изменить его к нулю (нелогичным, я знаю, но я не сделал это), или:

working_directory(X,X).

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

УХО может быть изменен следующим образом:

working_directory(X,'Some New Directory'). 

... который объединит X с ВПЦ затем измените УХО на «Некоторые новые директории», поэтому X будет предыдущий рабочий каталог.

+1

Чтобы запросить текущий каталог без его изменения, обычной идиомой является 'work_directory (X, X)'. –

+0

@PauloMoura Aha - это имеет смысл, любопытное. –

+0

Спасибо за указатель на документы SWI-Prolog. Я попробовал как «work_directory (X, '') .', так и' work_directory (X, X) .', но оба они приводят к 'no.'. (Я обновил свой пост соответственно.) – kjo