52633.fb2
Назад | Содержание | Вперёд
6. 5. Ввод программ: consult, reconsult
Передавать программы пролог-системе можно при помощи двух встроенных предикатов: consult и reconsult. Чтобы система считала программу из файла F, нужно поставить цель
?- consult( F).
В результате все предложения программы, содержащейся в F, будут использованы пролог-системой при ответе на дальнейшие вопросы пользователя. Если позже в том же сеансе произойдет "консультация" с другим файлом, предложения этого нового файла будут просто добавлены в конец текущего множества предложений.
Для того, чтобы запустить программу, не обязательно записывать ее в файл, а затем "консультироваться" с ним. Вместо чтения файла система может принимать программу прямо с терминала, который соответствует псевдофайлу user. Добиться этого можно так:
?- consult( user).
После этого система будет ожидать ввода предложений программы с терминала.
В некоторых пролог - системах применяется сокращенная запись для чтения программ из файлов. Файлы, из которых предстоит чтение, просто помещаются в список и этот список используется в качестве цели. Например:
?- [файл1, файл2, файл3].
Это в точности эквивалентно следующим трем целям:
?- соnsult( файл1), соnsult( файл2), соnsult( файл3).
Встроенный предикат reconsult аналогичен consult. Цель
?- reconsult( F).
даст тот же эффект, что и consult( F) с одним исключением. Если в F есть предложения, касающиеся отношений, которые уже были определены ранее, старые определения заменяются на новые из F. Разница между consult и reconsult в том, что consult всегда добавляет новые предложения, в то время как reconsult переопределяет ранее введенные определения. Однако reconsult не произведет никакого эффекта на те отношения, о которых в F ничего не сказано.
Следует еще раз заметить, что детали "консультирования" с файлами зависят от конкретной реализации Пролога. Это замечание касается и большинства остальных встроенных процедур.
Резюме
Ввод и вывод (отличный от связанного с вопросами к программе) осуществляется посредством встроенных процедур. В данной главе описан простой и практичный набор таких процедур, имеющихся во многих реализациях Пролога.
Файлы являются последовательными. Существуют текущие входной и выходной потоки. Пользовательский терминал рассматривается как файл с именем user.
Переключение между потоками осуществляется с помощью процедур:
sее( Файл) Файл становится текущим входным потоком
tell( Файл) Файл становится текущим выходным потоком
seen закрывается текущий входной поток
told закрывается текущий выходной поток
Файлы читаются и записываются двумя способами:
как последовательности символов
как последовательности термов
Встроенные процедуры для чтения и записи символов и термов таковы:
rеad( Терм)
вводит следующий терм
write( Терм)
выводит Терм
put( КодСимвола)
выводит символ с заданным ASCII - кодом
get0( КодСимвола)
вводит следующий символ
gеt( КодСимвола)
вводит ближайший следующий "печатаемый" символ
Две процедуры облегчают форматирование:
nl начинает новую строку
tab( N) выводит N пробелов
Процедура nаmе( Атом, СписокКодов) осуществляет синтез и декомпозицию атомов. СписокКодов - список ASCII кодов символов, образующих Атом.
Назад | Содержание | Вперёд