SWI-Prolog-не утверждать

Я определяю оператор следующим образом:

:- op(500, xfx, =>).

когда я пытаюсь что-то вроде:

assert(a => b).

Prolog вызывает ошибку, в которой говорится: "нет разрешения на изменение static_procedure (=>)/2".

любое решение?

2 ответов


в качестве безопасности вы должны предупредить SWI, что собираетесь изменить предикат во время выполнения:

:- dynamic (=>)/2.

положить в верхней части файла должны сделать это.


вы, должно быть, имели в виду другой символ вместо (=>)/2. Вероятно (->)/2 который является конструкцией управления, которая не может быть изменена.

Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 6.1.3-116-gf1c7e06)
...
?- asserta((a -> b)).
ERROR: asserta/1: No permission to modify static procedure `(->)/2'
ERROR: Defined at /opt/gupu/pl-devel/lib/swipl-6.1.3/boot/init.pl:194
?- op(500, xfx, =>).
true.

?- asserta(a => b).
true.