Динамические предикаты в SWI PROLOG
Будем разбирать пример предиката человек(кто-то), а именно person(Who).
Во-первых используйте dynamic/1. Это говорит компилятору, что реализация предиката может отсутствовать, а ещё, что предикат может быть подгружен во время исполнения.
Пример:
:- dynamic
person/1.
Как удалить динамический предикат в SWI PROLOG?
Есть два способа.
1) retractall(person(_))
Нужно учесть, что если в конце используете этот метод, то программа должна до него дойти, а не вылететь по ошибке.
2) call_cleanup(go_with_clean_db, cleanup_db)
Лишён недостатка первого способа.
Источник: http://www.swi-prolog.org/howto/database.html |