Ответ в теме: Сохранение изменений assert и retract в SWI Prolog

      Комментарии к записи Ответ в теме: Сохранение изменений assert и retract в SWI Prolog отключены
#2172

Ключевое слово dynamic разрешает изменение предиката во время выполнения программы, т.е. использование функций assert и retract. Обращения к динамическим предикатам распределяются по потокам при параллельной обработке. Предикат, сохраняемый в файл должен быть динамическим.

Предикаты assert и retract выполняют добавление и удаление данных из внутренней базы данных, которая всегда располагается в памяти текущего процесса, которая освобождается операционной системой при завершении сессии (процесса).

Данные из внутренней базы данных не будет автоматически переписываться в файл, однако вы можете сделать это предикатами tell и told, которые открывают и закрывают файл. При закрытии файла данные сохраняются на диске. Для записи фактов из базы в файл можно использовать предикат listing, который выводит данные из базы на текущее устройство.

tell('database_file.txt'), % открытие файла для записи
listing(ig_node), % переписывание данных из базы в файл
told. % закрытие файла (сохранение изменений в файле)

Для загрузки данных из файла используется следующий синтаксис:
['database_file.txt'].

При этом данные из файла загружаются во внутреннюю базу, это могут быть как факты, так и функции.