Можно легко обратиться к файлу Prolog, используя consult/1
или [filename].
.
Предположим, я генерирую код Пролога как атом. Я могу в предикате записать этот код в файл, а затем обратиться к нему и запросить предикат из этого кода, например.
example :-
generate_stuff(X),
write_to_file(X,'filename.pl'),
consult('filename.pl'),
predicate_in_filename.
Как мне сделать то же самое, но без записи X
(кода) в файл? Мне не повезло с assert
, который принимает термин в качестве входных данных, тогда как здесь у меня есть полный код в атоме.
consult
утверждает термины, содержащиеся вfilename.pl
. Вы можете написать предикат, который анализируетX
и утверждает термины. Существует множество предикатов поддержки Prolog для извлечения терминов. Непонятно, как вы структурировали или использовалиgenerate_stuff/1
в целом, но дляgenerate_stuff
может быть более целесообразно утверждать термины по мере их создания, а не собирать их все в виде гигантской строки и потом анализировать. - person lurker   schedule 09.07.2016X
на термины?read_term_from_atom/3
разбирает только первый, и мне было бы обременительно переписывать что-то, что разделяет термины в атоме. - person Fatalize   schedule 09.07.2016X
как потока, а не файла. - person lurker   schedule 09.07.2016generate_stuff
нельзя составить список терминов или предложений? - person lurker   schedule 09.07.2016rw
должен генерировать предикат, который переворачивает, а затем записывать ввод. Я читаю первый символ, генерируюreverse(Input,V0)
, затем рекурсивно вызываю анализатор и добавляю,\nwrite(V0)
, затем.
. Я не понимаю, как я могу легко сделать то же самое с терминами вместо того, чтобы просто присоединять атомы друг к другу. - person Fatalize   schedule 09.07.2016