Если я хочу сделать правило динамичным, таким образом, я могу использовать, утверждают после того, как файл базы данных был загружен, как я делаю это? Я использую Пролог XSB в данный момент, файл - что-то вроде этого:
:- dynamic likes/2
likes(mary,tom)
когда я пытаюсь консультироваться с файлом с XSB, я получаю ошибку:
? consult('D:\file.P).
not permitted to assert to static predicatelikes/2
forward continuation...blahblah
Какие-либо идеи?
Динамический предикат работает так, как вы ожидаете, так что если он у вас не работает, то что-то еще не так.
Если test.P выглядит так:
:- dynamic likes/2.
likes(mary,tom).
С ним можно ознакомиться, а затем утверждать больше likes/2 фактов:
XSB Version 3.2 (Kopi Lewak) of March 15, 2009
[i686-pc-linux-gnu; mode: optimal; engine: slg-wam; scheduling: local; word size: 32]
| ?- consult('test.P').
[Compiling ./test]
[test compiled, cpu time used: 0.0440 seconds]
[test loaded]
yes
| ?- assert(likes(mary, bob)).
yes
| ?- likes(X,Y).
X = mary
Y = tom;
X = mary
Y = bob;