Я пытаюсь разобраться в библиотеке интерфейса Java-Prolog JPL. Я могу найти множество примеров, когда люди используют пролог запрос из Java для получения информации из базы знаний, но нет примеров, когда база знаний строится динамически в Java. Как бы я это сделал?
Это было бы очень здорово, спасибо! Я считать Я использую статические методы класса Prolog, чем больше я смотрю на это, но это так странно, что у меня нет соответствующих примеров для работы.
Когда вы говорите knowledge base is constructed dynamically in Java, вы не говорите, где находятся данные. Вы имеете в виду: 1. Данные (факты) находятся в Прологе, а Java вызывает Пролог для получения данных. 2. Данные не являются фактами Пролога и что для доступа к данным необходимо получить доступ к ним через Java для использования с Прологом?
Я хочу, чтобы Java сказала Прологу: «Вот атом. Он ссылается на объект/JRef. Пожалуйста, запомните это. Я упоминал, что у меня есть правило, которое ссылается на этот атом? Помните и об этом». Итак, я хочу использовать вызовы методов Java для создания базы знаний, к которой в конечном итоге буду обращаться.
Из любопытства, знаете ли вы о Нео4дж? Это база данных Без SQL и, в частности, граф базы данных. Для моих целей мне нужно хранить большие объемы связанных данных, от 10 до 100 гигабайт, и быстро искать серии отношений. Хотя я мог бы использовать для этого факты Пролога, я не знаю, выдержит ли Пролог такое количество данных и сколько времени займут запросы.
Увидел, что JRef равен устарел
Представляет интерес: каталог JPL Примеры
Пролог имеет странное сходство с моим вариантом использования, поэтому я исследую его. Однако посмотрю на neo4j!
Почему бы не использовать предикаты для управления базой данных: swi-prolog.org/pldoc/man?section=dynpreds Вы можете оценить их из Java, как и любой другой запрос. Или я упускаю вашу мысль?
@ User9213 User9213 Я вызываю методы из Java во время работы Java-программы, поэтому я не могу использовать интерпретатор Prolog или читать готовый файл. В main(), например, у меня был бы такой вызов, как Predicate p = addPredicate(...);. Думаю, я нашел способ сделать это, но теперь я застрял в работе с исключениями нарушения прав доступа с помощью SWI-Prolog:/
Если я найду время, я попытаюсь написать реальный ответ, но сначала мне нужно будет настроить JPL.... А пока попробуйте оценить следующий запрос Prolog из Java: ?- assertz(a(1)).. Затем попробуйте запросить в том же экземпляре Prolog ?- a(X). Если вы получаете 1, это означает, что вам удалось динамически добавить факт в базу данных Prolog из Java.




Интересно, что вы об этом спрашиваете. В настоящее время я работаю над анализом плоского файла с использованием Prolog DCG, а затем использую JPL для вызова встроенной Java, чтобы добавить информацию из плоского файла в базу данных Neo4j. По моим оценкам, мне потребуется около недели, прежде чем я начну использовать JPL. Хотя моя цель не совпадает с вашей целью, и в зависимости от вашей цели может быть как раз наоборот. Я буду помнить об этом вопросе, когда доберусь до JPL, поскольку создание примера для вашего случая должно быть легким, когда у меня будет свое решение.