Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры к ГОСАМ (все билеты).doc
Скачиваний:
4
Добавлен:
01.04.2025
Размер:
2 Мб
Скачать
☆

Вопрос 1. Вне логические предикаты. Ввод-вывод. Доступ к программам и обработка программ. Металогические предикаты. Сравнение не основных термов.

В любой программе на любом языке программирования встает вопрос организации ввода - вывода информации. В Прологе, кроме того, существует возможность изменять программу по ходу ее выполнения. Все указанные действия реализуются с помощью нелогических предикатов. К нелогическим предикатам в Прологе относятся предикаты следующих основных групп:

• предикаты, обеспечивающие ввод-вывод;

• предикаты, определяющие доступ к текущей программе и ее обработку. Все эти предикаты характеризуются двумя основными признаками. Наличием побочного эффекта и тем, что они являются детерминированными.

В зависимости от специфики конкретной задачи в Прологе возможны два основных способа организации ввода-вывода:

• ввод-вывод, при котором в качестве основного информационного элемента обмена рассматривается символ

• ввод-вывод, при котором основным информационном элементом является терм (применяется когда есть возможность пересылать за одно обращение целые, осмысленные фрагменты информации);

Обмен с файлами

see(file) - file - имя файла, записанное по правилам операционной системы Любые вызовы предикатов ввода будут приводить к считыванию информации из этого файла.

seeing(File) - унифицирует File именем фала, который в настоящее время соответствует текущему входному потоку.

seen закрывает файл, открытый предикатом see(file), и перенаправляет входной поток на пользовательский терминал.

tell(file) - файл file создается или открывается как выходной и связывается с текущим выходным потоком. Вызовы предикатов вывода будут приводить к записи информации в файл.

told закрывает файл, открытый предикатом tell/1, и направляет текущий выходной поток на пользовательский терминал.

Файлы могут обрабатываться только последовательно. Каждый запрос на чтение из входного потока приведет к считыванию информации из текущей позиции входного потока. После этого текущая позиция будет перемещена на следующую позицию. Если запрос на чтение в конце файла, то в качестве ответа выдается атом end_of_file. Запись производиться аналогично. Все файлы являются «текстовыми», т.е. состоящими из символов. Символы - это буквы, цифры и специальные знаки.

Организация ввода-вывода термов

Для перемещения термов в Прологе служат следующие предикаты: • write(X) - выводит терм X в текущий выходной поток;• read(X) - унифицирует X со следующим термом из текущего входного потока. Ограничителем терма является точка, за которой следует пробел или начало новой строки.

3.3. Перемещение символов Для перемещения символов в Прологе существуют следующие предикаты:• put(X) - записывает в текущий выходной поток символ, код которого соответствует значению X. X - целое, значением которого является некоторый ascii - код. Например: ?- put(65). А

• get0(X) - унифицирует X с ascii - кодом следующего символа из текущего входного потока. • get(X) - унифицирует X с ascii - кодом следующего символа из текущего входного потока, но вызовет пропуск всех непечатаемых символов (например, пробелов) от текущей позиции во входном потоке до первого печатаемого символа.