Создайте и загрузите копию экземпляра SWI-Prolog с JPL
Я пытаюсь создать копию экземпляра Prolog и загрузить ее с помощью JPL (интерфейс Java-Prolog). Я могу придумать несколько возможных способов сделать это, но ни один из них не полностью разработан, и именно поэтому я пришел сюда.
Во-первых, я знаю, что могу сохранить копию состояния, используя qsave_program/2
, Это создает исполняемый файл, который я могу запустить. Однако мне нужно запросить этот сохраненный экземпляр из Java, используя JPL. Я пытался найти документацию для этого, но я не смог найти ни одной (вероятно, не является общей проблемой). Есть ли способ запустить экземпляр, сохраненный с помощью qsave_program/2
и запросить его из JPL?
Вторая идея заключается в том, чтобы запросить исходный экземпляр для всех динамически утвержденных предложений. Тем не менее, я не могу знать, что было заявлено, поэтому я не могу просить эти вещи напрямую, а скорее я должен собирать эти предложения на основе того факта, что они являются динамическими. Тогда я мог бы просто запустить другой экземпляр из JPL и утверждать эти факты, чтобы создать копию. Это возможно? И будет ли это эффективно создавать копию государства?
1 ответ
Хорошо, вот решение, которое я выбрал. Я могу найти все предикаты, которые мне нужно будет восстановить с помощью следующего запроса:
predicate_property(X,dynamic),\+predicate_property(X,built_in),\+predicate_property(X,number_of_clauses(0)).
Вот почему я думаю, что это будет работать для меня.predicate_property(X,dynamic)
даст мне все динамические предикаты. Причина, по которой я не останавливаюсь здесь, заключается в том, что существует много динамических предикатов, предложения которых мне не нужно явно утверждать в моем новом экземпляре пролога. Предикаты, которые имеют свойство built_in
можно игнорировать, потому что они будут автоматически определены при создании нового экземпляра моего пролога. Даже если они явно определены пользователем, это определение будет пересоздано, поскольку я обращаюсь к одному и тому же файлу. Я также могу игнорировать те предикаты, которые не имеют предложений (number_of_clauses(0)
), потому что предикаты не влияют на состояние, если у них нет предложений.
Итак, когда у меня есть все необходимые динамические предикаты, я могу найти все решения для этих предикатов, составить список Условий, возвращаемых в Java через JPL, открыть новую консультацию по файлу и заново подтвердить эти Условия.