По моему мнению, лучший способ чтения из файлов в SWI Prolog (особенно если вы хотите сделать что-то, что не охватывается стандартными предикатами, такими как read / 2, который читает термины Prolog из потоков), это сначала написать DCG = определенная фраза грамматики) для декларативного указания того, что вы хотите описать. Вы можете использовать DCG в интерактивном режиме в запросах, чтобы опробовать его (то есть проанализировать и часто также генерировать строки, которые он описывает). Затем используйте библиотеку SWI-Prolog (pio), чтобы применить DCG к файлу с фразу_from_file / 2.