Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пролог бомбы часть 1 (27-39).doc
Скачиваний:
2
Добавлен:
26.09.2019
Размер:
120.32 Кб
Скачать

35.Создание символьных префиксов. Преобразование строк в список символов.

Предикат frontchar полезен при преобразовании строки в список символов. Пусть, например, необходимо преобразовать строку STARS в список ['S','T','A','R','S']. Метод этого преобразования, заключается в циклическом использовании предиката

frontchar для "вырезания" первого символа и размещения его в списке. Правило, которое выполняет эту процедуру, следующее:

convert("", []).

convert(Str, [Head|Tail]) :-

frontchar(Str, Head, Str1),

convert(Str1, Tail).

В правиле convert первым параметром является строка, а вторым параметром - список. Предикат frontchar рекурсивно извлекает первый символ из Str и помещает его в список.

Создать "префиксный" символ - это значит присоединить этот символ к началу строки. Например, присоединение префикса 'A' к "BCDEF" дает строку "ABCDEF". Эта операция в Турбо-Прологе реализуется с помощью встроенного предиката frontchar:

frontchar(String,Char,Rest_of_string).

Объекту String присваивается значение, состоящее из Char и Rest_of_string (остаток строки).

Предикат frontchar аналогичен предикату concat, за исключением того, что он присоединяет значение типа char к началу строки. Как и предикаты, выполняющие преобразование типов, предикат frontchar имеет несколько направлений обработки данных.

36.Специальные строки Пролога.

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

1. Строка строится из прописных и строчных букв, цифр и символов подчеркивания.

2. Между символами не должно быть пробелов.

3. Строка начинается с буквы.

4. Строка не может начинаться любым из специальных символов

5. Строка не может содержать управляющих символов.

Турбо-Пролог имеет встроенные предикаты, позволяющие проверять является ли строка специальной строкой Турбо-Пролога. Синтаксис этого предиката следующий:

isname(String).

Если String это строка Турбо-Пролога, то предикат будет успешным; в противном случае он будет неуспешным.

Предикат isname весьма удобен при программировании на Турбо-Прологе операций преобразования исходного текстового файла на одном языке в исходный текстовый файл на другом языке. Если команда введена, то isname может определить будет ли она преобразована в формат Турбо-Пролога в соответствии с определением

имени, принятом в языке. Другое использование isname это обработка введенных с клавиатуры данных и генерация исходных (текстовых) файлов, которые могут быть скомпилированы Турбо-Прологом.

37.Формирование атомов из строк.

Атом (token) это последовательность символов. Такая группа символов является специальной строкой Турбо-Пролога. Атом может быть числом. Если число имеет предшествующий знак (+ или -), то этот знак рассматривается как отдельный атом. Атом может быть символом, но только не символом пробела. Переменные используются для передачи параметров. Переменные являются атомами, но не

все атомы есть переменные. Турбо-Пролог имеет встроенные предикаты для извлечения атома из строки. Это предикат fronttoken. Его синтаксис следую-

щий:

fronttoken(String, Token, Rest_of_string).

Либо String должна быть означена, либо оба Token и Rest_of_string должны быть означены.

Ниже приводится несколько примеров отношения, определяемого этим предикатом:

1. Предикат fronttoken(Str,"Default","Directory") присваивает Str значение "Default directory".

2. Предикат fronttoken(Str,"$default","$directory") присваивает Str значение "$default$directory".

3. Предикат fronttoken("Pointer",Token,Rest) присваивает Token значение "Pointer", а переменной Rest присваивает значение ""(пустая строка).

4. Предикат fronttoken("$Command",Token,Trail) присваивает Token значение "$", а переменной Trail значение "Command".

5. Предикат fronttoken("$$command",Token,Trail) присваивает Token значение "$", а переменной Trail значение "$command".

6. Предикат fronttoken("!default",Token,Rest) присваивает переменной Token значение "!", а переменной Rest значение "default".

7. Предикат fronttoken("$RUN AI.BAS",Token,Rest) присваивает переменной Token значение "$", а переменной Rest значение "RUN AI.BUS".

Предикат fronttoken может быть использован в правиле преобразования строки в список атомов. Это правило аналогично правилу, которое использовалось для преобразования строки в список аргументов:

convers(Str, [Head|Tail]) :-

fronttoken(Str,Head,Str1),!,

convers(Str1,Tail).

convers(_ , []).