- •Лабораторная работа № 4 Работа со списками
- •3.1 Длина строки
- •3.2 Конкатенация строк
- •3.3. Создание подстрок
- •3.4. Преобразование данных
- •3.5. Преобразования, определяемые пользователем
- •3.6 Создание символьных префиксов
- •3.7. Преобразование строк
- •3.8. Формирование атомов из строк
- •Лабораторная работа № 5 Работа с файлами
- •4.1.Предикаты для работы с файлами
- •Описание файлового домена
- •Запись в файл
- •Чтение из файла
- •Модификация существующего файла
- •Дозапись в конец уже существующего файла
- •Лабораторная работа № 6 Структуры
- •Абстракция данных
3.5. Преобразования, определяемые пользователем
Преобразования действительных чисел в целые или целых в действительные весьма удобны при выполнении математических вычислений. Преобразования строк в символы удобны при подготовке обработки данных и их записи во внешнюю память. В этом разделе будет показано, как строить правила для выполнения этих преобразований.
Рассмотрим преобразование действительного числа в целое. В этом примере целое значение, соответствующее действительному числу 5432.765, есть 5432. Правило преобразования построено при помощи символа равенства (=):
conv_real_int(R,N) :- R = N.
где R — это переменная для действительных чисел, а N — переменная для целых чисел.
Объявление в разделе predicates следующее:
conv_rea1_int (rea1, integer).
Правило пытается вычислить значение R. Если текущее значение R -действительное число, то правило успешно; в противном случае правило завершается неуспешно. При успешном завершении правила целая часть действительного числа присваивается целочисленной переменной N. В Турбо-Прологе целые числа ограничены диапазоном от -32 768 до 32 767, поэтому рассматриваемое правило преобразования не будет работать, если значение действительного числа меньше чем -32 768.0 или больше чем 32 767.0.
Правило для преобразования целого числа в действительное следующее:
conv_int_rea1(N,R) :- N=R.
где N — это целочисленная переменная, a R — переменная для действительных чисел. Если N имеет значение 1234, то R получит значение 1234 (десятичная точка подразумевается, но не пишется).
Правило пытается вычислить значение N. Если текущее значение N есть целое число, то правило успешно; в противном случае оно неуспешно. При успешном завершении правило выбирает целое число и присваивает его переменной R. И в этом случае правило преобразования работает только при условии, что целое число находится внутри допустимого диапазона.
Преобразование строки в символ также может быть выполнено при помощи простого правила:
conv_str_symb(S,Sb) :- S=Sb.
Например, если S="Turbo PROLOG", то Sb=Turbo PROLOG. Объект S объявлен как объект типа string, a Sb объявлен как объект типа symbol.
Программа Conversion2 (рис. 14) использует все рассмотренные правила. Результат ее работы показан на рис. 15.
/* Программа: Conversions2 */
/* Назначение: Демонстрация преобразования: */
/* (1) действительного числа в целое */
/* (2) целого числа в действительное */
/* (3) строки в символ */
predicates
conv rea1_int(rеа1,integer)
conv_int_rea1 (integer, rea1)
conv_str_symb(string,symbol)
goal
XI = 5432.765,
conv_rea1_int(XI,N1),nl,nl,
N2 = 1234,
conv_int_real(N2,X2),nl,nl,
S = "TURBO PROLOG",
conv_str_symb(S,Sb),n1.
clauses
conv_real int(R,N) :-
R = N
write("Input real - ".R),nl,
write("0utput Integer - ", N).
conv_int_real(N,R) :-
N = R,
write("Input Integer - ",N),nl.
write("0utput real - ,"R).
conv str_symb(S,Sb) :-
S = Sb,
write("Input string -",S),nl,
write("0utput symbol - ",Sb).
Рис. 14. Программа Conversion2
Рис. 15. Результат работы программы Conversions2
