2014-01-11 2 views
-1

У меня есть 2 вопроса о программировании пролога.Правила базы данных Prolog

У меня есть база данных, которая выглядит следующим образом:

message(bob,kelly). 
message(patrick,ann). 

база данных продолжается в этом формате. Итак, мой вопрос в SWI Prolog, как я могу написать правило и сохранить его, пока база данных открыта, что выяснит, отправил ли bob или получил какое-либо сообщение?

Другой - написать правило, чтобы узнать, отправлено или получено два человека сообщениями между ними. У меня есть идея, как это сделать, но это действительно запутывает использование SWI Prolog.

Вся благодарность!

+0

(1) помещает операторы 'message' в файл, (2) запускает вашу проломенную среду и включает в себя файл, (3) вводит запрос, такой как' message (bob, X) .', и вы будете см. Prolog даст вам значения 'X', которые указаны в ваших данных. – lurker

ответ

1

Я думаю, что вы были смущены представлением Prolog о «базе данных». Обычно «реляционная база данных» понимается как СУБД, которая является аббревиатурой для реляционной базы данных системы управления. Prolog предоставляет вам реляционную базу данных, но она не входит в состав и сама по себе, база данных система управления.

Пролог не «открывает базу данных», он «справляется с файлом». Когда вы делаете [foo], он просто открывает foo.pl, анализирует содержимое в памяти и закрывает файл. Файл не остается открытым. Если вы asserta/1 или retract/1 фактов, которые возникли в этом файле, изменения происходят в памяти, но Prolog не знает и не заботится о том, что они пришли из этого файла, и Prolog никогда не будет волшебным образом пересматривать файл после его изменения или записи новый файл на диск на своем месте.

Если вы хотите, чтобы Prolog узнал, что Боб отправил Келли сообщение, вам придется его утверждать. Если вы хотите, чтобы файл оставался актуальным после этого, вам нужно будет открыть файл и записать данные на него. Что еще более важно, возможно, вам нужно понять, что если вы запускаете несколько прологов, они не собираются подключаться к единой базе данных и совместно использовать ее. Они оба будут работать в собственном магазине памяти. Это означает, что если вы решите, что ваши изменения будут постоянными, вы должны убедиться, что у вас есть только один процесс с использованием файла. Если у вас более одного, они будут топать друг на друга.

Смежные вопросы