Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Еламан_II.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
67 Кб
Скачать
☆

55) Чтение информации из файла в Прологе

Имеется также предикат file_str, который целиком читает символы файла в строку или, наоборот, записывает содержимое строки в файл, в зависимости от того, свободен ли второй параметр этого предиката. Первым входным параметром этого предиката является символическое имя файла, а вторым — строка, в которую считывается содержимое файла или из которой записывается информация в него.

Для записи данных в текущее устройство записи служит уже знакомый нам предикат  write, который до этого мы использовали для вывода информации на монитор. Для чтения информации из активного устройства вывода — также уже знакомые нам предикаты readln (читает строку), readint (читает целое), readreal (читает вещественное число), readchar (читает символ),readterm (читает терм).

Так как это — наш первый опыт работы с файлами в Прологе, приведем всю программу целиком, со всеми разделами. В разделе описания внутренней цели организуем ввод имени файла и вызов основного предиката.

DOMAINS /* раздел описания доменов */

file = f /* f — внутреннее имя файла */

PREDICATES /* раздел описания предикатов */

write_file(file)

writeFile(string)

CLAUSES /* раздел описания предложений */

write_file(f):–

not(eof(f)),!, /* если файл f еще

не закончился */

readchar(C), /* читаем из него символ */

write(C," "), /* выводим символ на экран*/

write_file(f). /* продолжаем процесс */

write_file(_). /* это предложение нужно, чтобы предикат

не потерпел неудачу в случае, когда

будет достигнут конец файла */

writeFile(F_N):–

existfile(F_N),!, /* убеждаемся в существовании

файла с именем F_N */

openread(f,F_N), /* связываем внешний файл F_N

с внутренним файлом f

и открываем его на чтение */

readdevice(f), /* устанавливаем в качестве

устройства чтения файл f */

write_file(f), /* вызываем предикат, выводящий

на экран все символы

файла f */

closefile(f), /* закрываем файл */

readdevice(keyboard), /* перенаправляем ввод

на клавиатуру */

nl,nl, /* пропускаем строку */

write("Нажмите любую клавишу"),

/* выводим сообщение на экран */

readchar(_)./* ждем нажатия любой клавиши */

writeFile(F_N):–

write("Файл с именем ",F_N," не наден!").

/* выдаем сообщение, если предикат

existfile потерпел неудачу */

GOAL /* раздел описания внутренней цели*/

write("Введите имя файла: "),

readln(F_N), /* читаем название файла в переменную F_N */

writeFile(F_N).

61) Написать предикат, находящий максимум из двух чисел

Решение:

max(X,Y,X):-

X>Y. /* если первое число больше второго,

то первое число - максимум */

max(X,Y,Y):-

X<Y. /* если первое число меньше второго,

то второе число - максимум */

max(X,Y,Y):-

X=Y. /* если первое число равно второму,

возьмем в качестве максимума

второе число */