Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Clauses




readlist([H|T]:- readint(H),!, readlist(T).

readlist [ ]).

 

Строки, символы и символические имена

Под строкой понимается последовательность из нуля или нескольких символов. В Прологе такая последовательность используется для преобразования двух видов термов: символических имен строк. Символическое имя – это неправильная последовательность букв, цифр и знака подчеркивания, начинающаяся с маленькой буквы (stol_stul,l1,m1). Символическое имя относится к типу symbol. Строка – это последовательность любых символов, заключенная в двойные кавычки (”stol”), строка относится к типу string. Символические имена можно использовать для именования объектов и отношений, а строки – только для названия объектов и значений их атрибутов. Символические имена и строки автоматически преобразуются друг в друга, и все предикаты, определенные для строки, могут быть применены и к символическим именам. Основное различие между ними в том, что символические имена хранятся в таблице в оперативной памяти и доступ к ним осуществляется быстрее, чем к строкам, обработка которых ведется посимвольно.

Для ввода строк используется предикат readln(Str), для ввода символов – readchar(Ch), а для вывода любых термов – предикат write(…).

Пример. Описания строк, символических имен и символов.

Domains

simvol=char

simvol_imya=symbol

str=string

Пример. Применение предикатов ввода-вывода для различных типов данных.

Goal

write(”Введите символ ”), readchar(Ch), write(”Ch= ”,Ch, ” ”), nl,

write(”Введите строку ”),readln(Str), write(”Str= ”,Str, ” ”), nl,

write(”Введите символическое имя ”),readln(Sym),

write(”Sym”, Sym, ” ”), nl.

Встроенные предикаты для обработки строк:

frontchar(String,FrontChar,RestString)(string,char,string) – (i,o,o) (i,i,o) (i,o,i) (i,i,i) (o,i,i) Разделяет строку String на две части: первый символ FrontChar и оставшаяся часть строки RestString.
fronttoken(String,Token,RestString) (string,string,string) – (i,o,o) (i,i,o) (i,o,i)(i,i,i)(o,i,i) Разделяет строку String на лексему Token и остаток RestString (выполняется только для строк, состоящих из латинских букв).
frontstr(Lenght,InpString,StartString,RestString)(integer,string,string,string) - (i,i,o,o) Отрезает от заданной строки InpString строку StartString из Lenght символов. Выдает оставшуюся часть строки RestString.
concat(String1,String2,String3) (string,string,string) - (i,i,o) (i,o,i) (o,i,i) (i,i,i) Конкатенация двух строк: String3 = String1 + String2.
str_len(String,Length) (string,integer) - (i,i) (i,o) (o,i)   Определяет длину строки.
isname(StringParam) (string) - (i) Истинен, если StringParam представляет собой имя, доступное в Турбо-Прологе. Выполняется только для последовательности символов, состоящей из латинских букв.
format(OutputVariable,FormatString,Variable|Constant*) - (o,i,i) Выводит по формату FormatString список вывода Variable|Constant* в строковую переменную OutputVariable

Лексема - это последовательность символов, определяемая как:

· имя в соответствии с синтаксисом Турбо-Пролога,

· строчное представление числа,

· отдельный символ (может быть пустым - пробел).

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

str_list("",[]).

str_list(S,[H|T]):– frontchar(S,H,S1), str_list(S1,T).

/* пустой строке соответствует пустой список */

/* H — первый символ строки S, S1 — остаток строки */

/* T — список, состоящий из символов, входящих в строку S1*/

Пример. Вычислить длину строки.





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 463 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Надо любить жизнь больше, чем смысл жизни. © Федор Достоевский
==> читать все изречения...

2300 - | 1987 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.