Прочитать весь текстовый файл в переменную Prolog

Мне очень трудно понять это, хотя это одна из самых простых вещей в других языках: есть ли простой способ прочитать все содержимое текстового файла в переменную Prolog?


person sdesciencelover    schedule 19.06.2012    source источник


Ответы (2)


Просто укажите с помощью DCG то, что вы хотите описать, и используйте библиотеку (pio) для анализа файла:

:- use_module(library(pio)).

all([])     --> [].
all([L|Ls]) --> [L], all(Ls).

Пример:

?- once(phrase_from_file(all(Ls), 'all.pl')).
Ls = [10, 58, 45, 32, 117, 115, 101, 95, 109|...].
person mat    schedule 19.06.2012
comment
Спасибо! Это помогло мне. Я видел обсуждения использования DCG для произвольного ввода, но не мог установить связь с тем, как это можно использовать для чтения в произвольном файле. - person sdesciencelover; 20.06.2012
comment
@sdesciencelover: большое преимущество library(pio) проявится только в том случае, если вы уже выполняете обработку с помощью нетерминала. phrase_from_file/2 не считывает все содержимое файла одним махом, а выполняет некоторую внутреннюю буферизацию: таким образом файлы произвольного размера могут обрабатываться в постоянном пространстве. - person false; 23.06.2012
comment
почему раз/1? В идеале SWI должен обнаруживать детерминизм. Попробуйте использовать call_semidet/1: stackoverflow.com/questions/12939794/ - person false; 11.10.2013

в library(readutil) есть несколько встроенных модулей: см. read_file_to_codes или read_file_to_terms< /а>

person CapelliC    schedule 19.06.2012