Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

PROLOG_Labs / Лабораторная работа 7

.doc
Скачиваний:
83
Добавлен:
20.03.2015
Размер:
46.59 Кб
Скачать

ЛАБОРАТОРНАЯ РАБОТА №7

ТЕМА: Строки в Прологе.

ЦЕЛЬ: Научиться использовать возможности Пролога по организации работы со строками при написании различных программ.

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

1. frontchar(Строка,Символ,ОстальнаяСтрока)

(string,char,string) -

(i,o,o) (i,i,o) (i,o,i) (i,i,i) (o,i,i)

Предикат позволяет сформировать строку (ОстальнаяСтрока), которая содержит символы исходной строки (Строка),начиная с Символ.Поскольку параметры могут быть как входными, так и выходными, данный предикат может использоваться достаточно широко для работы со строками. Предлагаемые примеры иллюстрируют некоторые возможные варианты использования этого предиката.

Goal: frontchar("TPROLOG",CH,REST) % выделение пеpвого символа и подстpоки за ним

CH=T, REST=PROLOG

1 Solution

Goal: frontchar("TPROLOG",'T',REST) % выделение подстpоки после буквы T

REST=PROLOG

1 Solution

Goal: frontchar("TPROLOG",'P',"ROLOG") % сpавнение стpок

False

Goal: frontchar(X,'T',"PROLOG") % фоpмиpование стpоки

X=TPROLOG

1 Solution

2. fronttoken(Строка,Лексема,ОстальнаяСтрока)

(string,string,string) - (i,o,o) (i,i,o) (i,o,i) (i,i,i) (o,i,i)

Предикат позволяет гибко работать с лексемами, в качестве которых могут быть имена (в соответствии с синтаксисом Пролога), или числа (целые или вещественные), или специальные символы.

Goal: fronttoken("all boys do fine",TOK,REST)

TOK=all, REST= boys do fine

1 Solution

Goal: fronttoken("all+boys do fine",TOK,REST),

fronttoken(REST,TOK1,_) % выделение двух лексем

TOK=all, REST=+boys do fine, TOK1=+

1 Solution

Goal: fronttoken("22all boys do fine",TOK,REST)

TOK=22, REST=all boys do fine

1 Solution

Goal: fronttoken("22.66all boys do fine",TOK,REST)

TOK=22.66, REST=all boys do fine

1 Solution

Goal: fronttoken("-22.66all boys do fine",TOK,REST)

TOK=-, REST=22.66all boys do fine

1 Solution

Goal: fronttoken(".66all boys do fine",TOK,REST)

TOK=., REST=66all boys do fine

1 Solution

3. frontstr(Длина,ВходнаяСтрока,НачальнаяСтрока,ОстальнаяСтрока)

(integer,string,string,string) - (i,i,o,o)

Предикат позволяет формировать из ВходнаяСтрока строки НачальнаяСтрока заданной длины и ОстальнаяСтрока.

Goal: frontstr(3,"All boys do fine",STR1,STR2)

STR1=All, STR2= boys do fine

1 Solution

Goal: frontstr(9,"All boys do fine",STR1,STR2)

STR1=All boys , STR2=do fine

1 Solution

Goal: frontstr(0,"All boys do fine",STR1,STR2)

STR1=, STR2=All boys do fine

1 Solution

Goal: frontstr(-1,"All boys do fine",STR1,STR2)

No Solution

Goal: frontstr(20,"All boys do fine",STR1,STR2)

No Solution

4. concat(Строка1,Строка2,Строка3)

(string,string,string) - (i,i,o) (i,o,i) (o,i,i) (i,i,i)

Предикат реализует сцепление строк, т.е. операцию Строка3 = Строка1 + Строка2, а также pазличные функции, связанные со сцеплением.

Goal: concat("aaa","bbb",X)

X=aaabbb

1 Solution

Goal: concat("aaa","bbb","aaabbb")

True

Goal: concat("aaa","bbb","aaa----bbb")

False

Goal: concat(X,"bbb","aaa----bbb")

X=aaa----

1 Solution

Goal: concat("aaa",X,"aaa----bbb")

X=----bbb

1 Solution

5. str_len(Строка,Длина)

(string,integer) - (i,i) (i,o) (o,i)

В зависимости от типа параметров предикат выполняет разные функции, связанные с длиной строки.

Goal: str_len("abc",Len) % какова длина стpоки?

Len=3

1 Solution

Goal: str_len("abc",3) % длина стpоки pавна 3?

True

Goal: str_len(STR,15),writef("|%|\n",STR)

| |

STR=

1 Solution

6.isname(ПараметрСтрока)

(string) - (i)

Предикат осуществляет проверку параметра-строки на соответствие синтаксису Турбо-Пролога.

Goal: isname("Dan")

True

Goal: isname("2Leo")

False

Goal: isname("_JON")

True

Goal: isname("kelly_rich")

True

Goal: isname("_")

True

Goal: isname("abc1def2")

True

7. format(ВыходнаяПеременная,ФорматСтроки,Переменная | СписокКонстант*)

Предикат служит для задания формата вывода для строки ВыходнаяПеременная. Значения ФорматСтроки смотри в описании пpедиката writef .

Goal: format(X,"this % the %'st % test",is,1,"small")

X=this is the 1'st small test

1 Solution

Goal: format(X,"REALS: Default=%, Exp=%e, Shortest=%g",99E9, 99E9, 99E9)

X=REALS: Default=98999999999.99999989, Exp=9.9E+10,

Shortest=9.9E+10

1 Solution

Goal: format(X,"char=%c, int=%, unsigned=%u,hex=%x",97,-1,-1, -1)

X=char=a, int=-1, unsigned=65535, hex=FFFF

1 Solution

ПРАКТИЧЕСКОЕ ЗАДАНИЕ

Выполнить задание по индивидуальному номеру варианта, полученного у преподавателя.

  1. В файле, содержащем определенное количество слов (что-то вроде словарного запаса), обеспечить возможность поиска слова, введенного с клавиатуры.

  2. Из файла, содержащего несколько строк, получить первую строку, в которой найдется слово, введенное пользователем для соответствующего поиска.

  3. Создать программу, которая склоняет по падежам слово мужского рода, оканчивающееся на согласную букву. Ввод слова должен осуществляться с клавиатуры.

  4. Проверить, является ли введенная пользователем строка электронным адресом.

  5. Пусть имеются два файла: файл существительных и файл глаголов. Введенные одновременно с клавиатуры несколько слов должны получить свою классификацию: существительное или глагол.

  6. Написать программу, которая выделяет из введенной с клавиатуры строки первых два и последних два слова. Вывести их на экран.

  7. Написать программу, которая анализирует каждое слово из введенной пользователем строки и выдает информацию, можно ли его использовать в качестве имени Пролога.

  8. Создать программу, которая из введенной пользователем строки выбирает слова, длина которых не превышает 7 символов. Вывести их на экран.

  9. Написать программу, которая из строки, введенной с клавиатуры, выбирает слова, в которых заданная пользователем буква встречается не менее 3 раз. Вывести эти слова.

  10. Написать программу, которая из строки, введенной с клавиатуры, выбирает все встречающиеся в ней цифры и печатает их на экране отдельной строкой.

  11. Написать программу, которая подсчитывает во введенной с клавиатуры строке количество букв, равных букве, заданной пользователем.

  12. Написать программу, которая выделяет из введенной строки те слова, в которых содержаться цифры, и печатает их на экране.

  13. Написать программу, которая из введенной с клавиатуры строки выделяет все символы пунктуации и печатает их на экран отельной строкой.

  14. Написать программу, которая подсчитывает длину каждого слова из введенной с клавиатуры строки, выводи соответственно слово и его длину, а также определяет то слово, у которого наибольшая длина.

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Как выделить атомы из строки?

  2. Опишите предикат, позволяющий отделять символы.

  3. Как преобразовать слово в список символов? Объясните процедуру.

  4. Как преобразовать строку в список слов? Объясните процедуру.

  5. Какой предикат позволяет определить, можно ли считать слово именем Пролога?

  6. Как подсчитать длину строки?

  7. Для чего предназначен предикат concat?

  8. Как выделить из строки последовательность символов, заданной длины?