русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


ПРЕДИКАТИ ВВОДУ


Дата додавання: 2013-12-24; переглядів: 1523.


Пролог має предикати вводу, що призначені для вводу даного певного типу, універсальний предикат вводу для будь-яких доменів даних, предикат вводу бінарних даних без перетворення доменів даних.

Якщо тип даного, що вводиться не вірний, то предикати вводу повертають fail. Цей факт можна використати для повторення вводу при помилці.

Предикат вводу рядка: readln(Рядок)

(string)

Увід рядку закінчується клавішею „Enter”. При читанні рядку з клавіатури зчитує не більше 255 символів. При читанні з інших пристроїв читає до 64кб.

При роботі предиката працює ЕХО - функція (відображення введених символів на екран).

Приклад. do : - readln (S).

Вводиться: “abc” або abc - рядок типу Symbol.

Предикат вводу цілого числа: readint (N)

(integer)

Увід цілого числа закінчується клавішею „Enter”.При введенні вилучаються пропуски, що стоять попереду числа. Число перетворюється із символьного виду в бінарний.

Приклад: do:- readint(N).

Вводиться: 2341.

Предикат вводу дійсного числа: readreal (R)

(real)

Предикат працює аналогічно предикату readint. Дійсне число може вводиться з фіксованою крапкою і в експоненціальному виді. Предикат контролює форму запису числа.

 

Предикат воду символу: readchar(C)

( char )

Предикат вводить один символ звичайний чи керуючий. При вводі не працює ЕХО – функція, тобто введений символ не відображується на екрані. Предикат можна використовувати для вводу SCAN – коду (номеру клавіші). У буфері клавіатури кожен символ зберігається в слові(2 байта). Якщо символ є в таблиці ASCII, то він заноситься в перший байт. Для символу, що не входить в таблицю ASCII, в перший байт слова заноситься 0, а в другий SCAN – код.

 

 

 

Для символу А код ASCII 65

 

SCAN код 72

Для символу

 

Приклад вводу SCAN коду „стрілки вправо”:

do: - readchar (K), K= 0, readchar (C).

Вводиться: 72.

При натисненні клавіші “Enter” предикат повертає fail.

Предикат file_str (“DOS ім'я файлу”, Рядок)

Режими роботи:

(і, o) – читає весь текстовий файл в один рядок. Розмір <= 64Кб.

(і, і) – рядок записується у файл із зазначеним ім'ям. Якщо файл із таким ім'ям існує, то відбувається перезапис файлу.

При вводі даних з файлу увід закінчується комбінацією клавіш Ctrl-Z(2610).

Приклади: file_str (“F.dat”, S) - читає файл в рядок, якщо S вільна.

file_str (“F.dat”, ”Пролог”) - пише рядок в файл.

 

Використання такого предиката не вимагає відкриття чи закриття файлу.

Предикат file_bin(Ім’я файлу в ОС, Змінна)

Режими:

1. (і, о) привласнює вміст файлу в бінарному виді змінній;

2. (і, і) записує бінарне дане в файл.

Працює аналогічно предикату file_str.

Приклад.

disk("d:\\ira\\program\\Prolog\\v"),H=$[32,'A',31],file_bin("hh2.dat",H)

Програма назначає поточний каталог предикатом disk. Предикат file_bin працює у другому режимі, утворює файл hh2.dat. з одного рядка “2A1”.

Предикат readterm (Тип, Змінна)

(i, o)

За допомогою даного предиката можна вводити дані будь-якого типу.

Приклади:

1) readterm (integer, N) ввести ціле число

2) readterm (real, N) ввести дійсне число

3) Domains

s = string

...

readterm (s, Str). ввести рядок

4) Domains

c = Char

...

readterm (c, Ch).

 

При вводі рядків та символу обов'язково задавати лапки “ ”, ' '.

Для введення дійсних чи цілих чисел Domains не використовують.

Розглянемо, як уводяться дані складної структури. Нехай треба об'єднати кілька понять, як властивості деякого об'єкту. Для цього вводиться тип t.

Domains

t = tea (String, String) /* Назва чаю, тип чаю */

Predicates

do (t)

Clauses

do (T) : - readterm (t, T).

Goal

do (T), write (T).

Структура вводиться у вигляді: tea (“Lipton”, “байховий ”) і виводиться на екран в тому ж вигляді.

Предикат readblock(Кількість байтів, Змінна)

(і, о)

(цілий тип, binary)

Вводить вказану кількість байтів в бінарному виді, тобто робить дамп файлу або частини файлу. Кількість байтів повинна бути <= кількості байтів у файлі, включаючи символи, що керують виводом. Якщо задати кількість байтів 0, то буде зчитано весь файл. Вказана кількість байтів, що перевищує довжину файлу викликає помилку. Результат подається у шістнадцятирічному виді списком кодів символів і привласнюється змінній.

Розглянемо приклад. Нехай файл hh1.dat містить такі дані: 123

domains

file=f

goal

disk("d:\\ira\\program\\Prolog\\v"), openread(f,"hh1.dat"),

readdevice(f), readblock(0,H), closefile(f).

Програма назначає поточний каталог предикатом disk. Відкриває файл для читання і назначає на файл вхідний потік. Предикат readblock зчитає весь файл, тому що кількість байтів 0.Результат буде привласнено змінній Н у вигляді бінарної константи: $[31,32,33,0D,0A,34], де включено також символи “ПС” і “ВК”.


<== попередня лекція | наступна лекція ==>
Робота процедури P | Типи формат рядку


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн