Читайте также:
|
|
Специальные строки являются именами и используется для обозначения символических констант, доменов, предикатов и переменных. Они должны удовлетворять следующим свойствам.
1. Строка строится из букв, цифр, подчерков.
2. Строка должна начинаться с буквы.
3. Строка не может начинаться со спецсимволов.
4. В строке не может быть пробелов.
5. В строке не могут быть управляющие символы.
Для определения, удовлетворяет ли строка этим правилам, вводится специальный предикат isname(string) – проверяет содержание в строке посторонних символов. Обратная ситуация not(isname(string))
Предикат используется для преобразования текста с одного языка на другой, для обработки данных, введенных с клавиатуры и для генерации исходных файлов.
Атомом (token) называется последовательность символов, которая являются особым видом строки. Атомом может быть любое число, символ (кроме пробела), переменная. Для работы с атомами имеется встроенный предикат, который называется fronttoken, он используется для формирования атомов и строк:
fronttoken (строка, атом, остаток_строки)
При работе с этим предикатом должна быть означена либо строка, либо атом и остаток строки.
Примеры.
1. fronttoken (Str, ”Det”, “Dir”) дает Str=“DefDir”
2. fronttoken (“Pointer”, Token,Rest) дает Token=”Pointer”,Rest= “ “.
3. fronttaken(“$ Com”, A,T). Ответ: A=”$”, T= “Com”,
Предикат fronttoken используется также для преобразования строки в список атомов:
convert(строка, список) – cтроку переводит в список, результат – список.
convert(Str, [H|T]):= fronttoken(Str, H, Str1),!, – рекурсивное правило
convert(Str1, Т).
Граничное правило: convert(_, [ ]).
Второй вариант предиката будет успешным, если список пуст и определяет начало преобразования.
Пример.
domains
str _list=symbol*
str=string
predicates
convers(Str, Str_list)
clauses
convers(...)
Строка «One two thre» преобразуется в список [one, two, thre].
При наборе программы часто приходится писать длинный список утверждений. Например, яблоко – (фрукт), фрукт – (груша), фрукт – (слива). Эти утверждения могут быть построены на основе входной строки «яблоко, груша, слива». При преобразовании строки в список сначала добавляется имя функтора, т.е.: [фрукт(яблоко), фрукт(слива)].
Правило располагает их по строчкам и присоединяет точку к каждому элементу с функтором. После построения правила, формирующего список, необходимо построить правило преобразования с использованием предиката fronttoken.
Правило этого преобразования должно удовлетворять двум требованиям.
1. transt (“ “, [ ])
2. правило должно проверять тип каждого элемента и для целого числа должно давать имя функтора n, для символа – ch, для строки – s.
Правило: tranf(str, [H|T]): – fronttoken (Str, Symboltype, Strx), – используется для вытаскивания первого атома из строки,
choosetoken(Symboltype, H), – определяет тип
transt(Strx, T).
Подправила:
choosetoken (S, n, (N)): – str_int (S, N)
choosetoken(S, c(C)): – str_char(S, C).
choosetoken (S, s (S)): – isname(S)
Правило transt допускает строки, состоящие из символов и чисел. В момент вызова правила значение Symbol_type может быть числом, символом или именем. Тип Symbol_type определяется с помощью choosetoken
Пример.
domains
token_type=n(integer); c(char); s(string)
token_list=token_type*
predicates
transt(string, token_list)
choose_token(strin, token_type)
clauses
transt(“”, []).
transt(....) – смотри выше.
Запрос goal: transt(«LOTUS 123», Ft) дает список [s(«LOTUS»), n(123)].
Дата добавления: 2015-09-06; просмотров: 95 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Работа с символами и строками | | | Создание динамических баз данных |