«динамический» предикат в прологе - PullRequest
5 голосов
/ 11 марта 2010

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

:- dynamic likes/2

likes(mary,tom)

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

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

Есть идеи?

1 Ответ

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

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

Если test.P выглядит так:

:- dynamic likes/2.

likes(mary,tom).

С ним можно ознакомиться, и тогда можно утверждать больше лайков / 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...