Поведение предиката листинга зависит от интерпретатора 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.