Лабораторная работа
Prolog. Работа с файлами
Категория: | Лабораторная работа |
Дисциплина: | Функциональное и логическое программирование |
Город: | Беларусь, Минск |
Учебное заведение: | БНТУ, ФИТР |
Тег: | #PROLOG |
Стоимость работы: | 8 руб. |
Оценка: | 10 |
Объем страниц: | 10 |
Год сдачи: | 2021 |
Дата публикации: | 24.12.2021 |
Фрагменты для ознакомления
Отчет по лабораторной работе № 9
дисциплина: «Функциональное и логическое программирование»
РАБОТА С ФАЙЛАМИ
Цель работы: приобретение практических навыков в составлении и отладке Пролог-программ, использующих файлы.
Задание общее по лабораторной работе:
Из входной строки, содержащей последовательность слов (например, женские имена), разделенных пробелами, получить предложения с заданным именем функтора (например, женщина), аргументами которого являются слова входной строки. Каждое предложение должно располагаться в отдельной строке и заканчиваться точкой. Предложения записать в файл, а затем из файла вывести на экран дисплея.
Код программы:
domains
file=datafile
list=string*
predicates
nondeterm readin(string)
nondeterm create_file(string).
nondeterm readout
nondeterm result
clauses
create_file(Str):-
write("Введите имя файла: "),
readln(Filename),nl,
openwrite(datafile,Filename),
writedevice(datafile),
readin(Str),
closefile(datafile),
openread(datafile,Filename),
readdevice(datafile),
readout,
closefile(datafile).
readin("" ):- !.
readin(Str):-
fronttoken(Str, Slovo, OST),
concat("Мужчина(",Slovo, E),
concat(E,").\13\10",R),
write(R),
readin(OST).
Скриншоты результатов:

Задание индивидуальное:
4.7. Извлечение из текстового файла строк, длина которых больше заданной.
Код программы:
/* Извлечение из текстового файла строк, длина которых больше заданной. */
domains
file = filename %file - стандартный тип домена (файловый), filename - логическое имя файла.
list = string*
length = integer
predicates
nondeterm file_list(list)
nondeterm result
nondeterm output(list,integer)
nondeterm writefile(list, integer)
clauses
file_list([]):-
eof(filename),!. %если конец файла
file_list([H|T]):-
not(eof(filename)), % пока не конец файла
readln(H),
write(H,"<=> "),
str_len(H,Z),
write(Z,"(длина);"),nl,
file_list(T).
output([],_).
output([H|T], Lgth) :-
str_len(H, Length),
Length >Lgth,
write(H), nl,
output(T, Lgth).
Скриншоты результатов:


Задание индивидуальное:
4.9. Сортировка строк текстового файла в порядке увеличения их длины.
Код программы:
domains
file = datafile
list = string*
predicates
nondeterm result
nondeterm sort(list,list)
nondeterm paste(string,list,list)
nondeterm read_list(list)
nondeterm write_list(list)
clauses
sort([], []).
sort([H|T], Lots) :-
sort(T, Tots),
paste(H, Tots, Lots).
Скриншоты результатов:

Задание индивидуальное:
4.18. Извлечение из текстового файла строк, заканчивающихся точкой.
Код программы:
/* Извлечение из текстового файла строк, закачивающихся точкой.*/
domains
file = filename %file - стандартный тип домена (файловый), filename - логическое имя файла.
list = string*
length = integer
predicates
nondeterm file_list(list)
nondeterm result
nondeterm output(list)
nondeterm writefile(list)
clauses
file_list([]):-
eof(filename),!.
file_list([H|T]):-
not(eof(filename)),
readln(H),
write(H), nl,
file_list(T).
Скриншоты результатов:

Контрольные вопросы:
1. Объявление файловых доменов.
2. Какие из устройств являются стандартными устройствами ввода и вывода по умолчанию.
3. Встроенные логические имена стандартных устройств ввода-вывода.
4. Что такое логическое (символическое) имя файла и где оно объявляется?
5. Может ли быть записано логическое имя файла в программе с прописной буквы?
6. Сохраняется ли содержимое файла, открытого для записи предикатом openwrite?
7. Как можно дополнить содержимое файла новыми данными?
8. Какой предикат открывает файл одновременно на чтение и запись?
9. Что произойдет, если файл, открытый для записи, не закрыть предикатом closefile?
10. Какие предикаты служат для переадресации устройств чтения-записи?
11. Как можно записать содержимое всего текстового файла в строку?
12. Нужно ли открывать и закрывать файл при использовании предиката file_str?
13. Как наиболее просто вывести содержимое всего текстового файла на экран?
14. Что используется в качестве аргументов в предикатах eof и existfile?
15. Какой предикат служит для чтения строки из файла?
16. Можно ли использовать предикат filemode для установления режима работы с файлом (бинарный или текстовый)?
17. Назначение третьего аргумента предиката filepos.
Вывод: приобрёл практические навыки в составлении и отладке Пролог-программ, использующих файлы.
297
1