Лабораторная работа
Prolog. Работа со строками
Категория: | Лабораторная работа |
Дисциплина: | Функциональное и логическое программирование |
Город: | Беларусь, Минск |
Учебное заведение: | БНТУ, ФИТР |
Тег: | #PROLOG |
Стоимость работы: | 6 руб. |
Оценка: | 10 |
Объем страниц: | 6 |
Год сдачи: | 2021 |
Дата публикации: | 24.12.2021 |
Фрагменты для ознакомления
Отчет по лабораторной работе № 7
дисциплина: «Функциональное и логическое программирование»
РАБОТА СО СТРОКАМИ
Цель работы: приобретение практических навыков работы со строками в программах на Visual Prolog.
Задание общее по лабораторной работе:
Введенную с клавиатуры строку вывести на экран дисплея наоборот.
Код программы:
predicates
nondeterm наоборот(string, integer, string)
nondeterm результат
clauses
наоборот(_, 0,"").
наоборот(Строка, Длина1, ИтСтрока1) :-
Длина2 = Длина1 - 1,
frontstr(Длина2, Строка, СтрокаОстат, Символ),
наоборот(СтрокаОстат, Длина2, ИтСтрока2),
concat(Символ, ИтСтрока2, ИтСтрока1).
Скриншоты результатов:

Задание индивидуальное:
4.7. Из последовательности слов, разделенных пробелами, выбрать слова, у которых первый и последний символы одинаковые.
Код программы:
domains
list=string*
predicates
nondeterm проверка(char, char, integer)
nondeterm перв_посл_одинак(string, list)
nondeterm результат
clauses
Скриншоты результатов:

Задание:
4.9. Дана строка символов. Если в ней нет символа *, то строку оставить без изменения, иначе заменить символ, стоящий после первой *, на символ +.
Код программы:
domains
str = string
predicates
nondeterm поиск_звезд(str,str)
nondeterm замена(str,str)
nondeterm результат
clauses
Скриншоты результатов:

Задание:
4.20. Найти в строке слова с числовыми символами.
Код программы:
predicates
nondeterm lendth_words(string,integer).
nondeterm result.
nondeterm take_word(integer,string,string,string).
nondeterm check(string, string, integer).
nondeterm str_numbers(string,string).
clauses
lendth_words(Строка, 0) :-
frontchar(Строка, Символ, _) ,
Символ = ' '.
lendth_words(Строка, Длина) :-
frontchar(Строка, Символ, ОстатокСлова),
Символ <> ' ' ,
lendth_words(ОстатокСлова, Длина1),
Длина = Длина1+1.
take_word(0, "", "", "").
Скриншоты результатов:

Контрольные вопросы:
1. Что будет получено в качестве результата при выполнении предиката str_len с поточным шаблоном (i,i)?
2. Можно ли использовать предикат concat для получения остатка строки при задании строки и ее подстроки?
3. Возможно ли применение предиката frontchar со свободными второй и третьей переменными?
4. Можно ли с помощью предиката frontchar подсоединить заданный символ к началу строки.
5. Сколько имеется вариантов поточного шаблона предиката frontstr?
6. Имеется строка, содержащая последовательность имен, разделенных пробелами. Какой предикат можно использовать для преобразования этой строки в список имен?
7. Напишите правило преобразования строки в список атомов. Какой получится список, если в качестве входного параметра этому правилу будет передана следующая строка: “abc f17 38de, a5b”?
8. Назначение предиката isname.
9. Сколько вариантов поточного шаблона имеют предикаты преобразования типов (за исключением term_str)? Смысл поточного шаблона (i,i) для этих предикатов.
10. С помощью какого предиката преобразования типов можно определить десятичный код символа?
11. Есть ли стандартный предикат для преобразования целого числа в вещественное и наоборот?
Вывод: приобрёл практические навыки работы со строками в программах на Visual Prolog.
293
1