Простой вопрос - XSB Prolog - PullRequest
       10

Простой вопрос - XSB Prolog

1 голос
/ 11 марта 2010

Я погружаюсь в мир пролога, но, похоже, я попал на мелководье!

Я смотрю на манипулирование базой данных в прологе в отношении этого урока: Изучите Пролог сейчас!

В нем говорится, что я могу увидеть свою базу данных, введя listing

Итак, я попробовал это, и он должен в основном выводить все в моем файле .P (факты, правила), но вот что я получаю, вот моя последовательность команд:

? consult('D:\Prolog\testfile.P').
[testfile.P loaded]

? listing.

library_directory(C:blahblahpathtoXSB)
library_directory(C:blahblahXSBpath)
{this is listed around 5 times)}

не должна ли эта команда отображать то, что находится в testfile.P, согласно учебному пособию? Кроме того, после консультации с testfile.P я должен иметь возможность использовать assert, чтобы добавить больше фактов, но это на самом деле ничего не меняет в testfile.P ..?

любые идеи

1 Ответ

2 голосов
/ 12 марта 2010

Поведение предиката листинга зависит от интерпретатора Prolog. Документация XSB объясняет, какой код будет включен в вывод списка / 0:

Обратите внимание, что в списке / 0 нет списка скомпилированные предикаты, если они не имеют динамическое свойство (см. предикат недвижимость / 2). Предикат получает динамическое свойство, когда оно явно объявлен как динамический или автоматически приобретает его, когда некоторые пункты для этого Предикат утверждается в базы данных.

С очень простым файлом test.P, содержащим это:

test(a,b).

Здесь используется листинг / 0 в XSB как с проверенным файлом, так и с утвержденным правилом. Он выводит только динамически утвержденное правило, а не содержимое файла:

| ?- consult('test.P').
[test loaded]

yes
| ?- listing.
library_directory(/home/jeffd/xsb/XSB/packages).
library_directory(/home/jeffd/xsb/XSB/site/lib).
library_directory(/home/jeffd/xsb/XSB/site/config/i686-pc-linux-gnu/lib).
library_directory(/home/jeffd/xsb/XSB/config/i686-pc-linux-gnu/lib).
library_directory(/home/jeffd/.xsb/config/i686-pc-linux-gnu).

yes
| ?- assert(testing(c,d)).

yes
| ?- listing.
testing(c,d).

library_directory(/home/jeffd/xsb/XSB/packages).
library_directory(/home/jeffd/xsb/XSB/site/lib).
library_directory(/home/jeffd/xsb/XSB/site/config/i686-pc-linux-gnu/lib).
library_directory(/home/jeffd/xsb/XSB/config/i686-pc-linux-gnu/lib).
library_directory(/home/jeffd/.xsb/config/i686-pc-linux-gnu).

SWI-Prolog ведет себя так, как Learn Prolog Now описывает и выводит содержимое обоих файлов и динамически добавленных правил:

?- consult('test.P').
% test.P compiled 0.00 sec, 1,192 bytes
true.

?- assert(testing(c,d)).
true.

?- listing.

test(a, b).

%   Foreign: rl_read_history/1

:- dynamic testing/2.

testing(c, d).

%   Foreign: rl_write_history/1

%   Foreign: rl_add_history/1

%   Foreign: rl_read_init_file/1
true.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...