Przypuśćmy, że mam 3 węzły A, B, i C i istnieje krawędź między a a B i między B i C. Chcę stwierdzić nowy fakt do bazy danych w czasie wykonywania, tak że jeśli jest krawędź pomiędzy a B i kolejna krawędź od b do c, mogę osiągnąć od A do C. Chcę dodać krawędź (A, C), ale mam następujące problemy, z góry dziękuję

dynamic/1: No permission to modify static procedure `edge/2' 
ERROR: [Thread pce] c:/users/win7/documents/prolog/test.pl:6: Syntax error:      Operator expected

To jest mój kod:

edge(a,b).
edge(b,c).

:- dynamic edge/2.

conn :-(X,C):- edge(X,Y),edge(Y,C),assert(edge(X,C)).
0
Subhi Ayman 16 luty 2017, 19:25

2 odpowiedzi

Najlepsza odpowiedź

W końcu działa,

: - Dynamiczna krawędź / 2. krawędź (A, B). krawędź (b, c).

Conn (x, y, c): - krawędź (x, y), krawędź (y, c), twierdzić (krawędź (x, c)).

-1
Subhi Ayman 20 luty 2017, 17:46

Deklaracja dynamic musi być pierwsza, przed zdefiniowanymi klauzulami dla edge/2.

3
Isabelle Newbie 16 luty 2017, 16:48