Лабораторная работа

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.

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

262