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

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.

263