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.