Мне очень трудно понять это, хотя это одна из самых простых вещей в других языках: есть ли простой способ прочитать все содержимое текстового файла в переменную Prolog?
Прочитать весь текстовый файл в переменную Prolog
Ответы (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
Спасибо! Это помогло мне. Я видел обсуждения использования DCG для произвольного ввода, но не мог установить связь с тем, как это можно использовать для чтения в произвольном файле.
- person sdesciencelover; 20.06.2012
@sdesciencelover: большое преимущество
library(pio)
проявится только в том случае, если вы уже выполняете обработку с помощью нетерминала. phrase_from_file/2
не считывает все содержимое файла одним махом, а выполняет некоторую внутреннюю буферизацию: таким образом файлы произвольного размера могут обрабатываться в постоянном пространстве.
- person false; 23.06.2012
почему раз/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