“динамический” предикат в прологе

Если я хочу сделать правило динамичным, таким образом, я могу использовать, утверждают после того, как файл базы данных был загружен, как я делаю это? Я использую Пролог XSB в данный момент, файл - что-то вроде этого:

:- dynamic likes/2

likes(mary,tom)

когда я пытаюсь консультироваться с файлом с XSB, я получаю ошибку:

? consult('D:\file.P).
not permitted to assert to static predicatelikes/2
forward continuation...blahblah

Какие-либо идеи?

5
задан KP65 11 March 2010 в 16:23
поделиться

1 ответ

Динамический предикат работает так, как вы ожидаете, так что если он у вас не работает, то что-то еще не так.

Если 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;
8
ответ дан 14 December 2019 в 04:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: