Стандартные предикаты ввода-вывода в Турбо-Прологе



Турбо Пролог имеет отдельные предикаты для чтения с клавиатуры или из файла данных целого, вещественного, символьного и строкового типа. Работе с файлами будет посвящена лекция 12, а сейчас мы рассмотрим чтение из стандартного устройства ввода информации (клавиатуры) и, соответственно, запись на стандартное устройство вывода информации (монитор).[8]

Предикат readln считывает строку с текущего устройства ввода и связывает ее со своим единственным выходным параметром.

Предикат readint читает с текущего устройства целое число и связывает его со своим единственным выходным параметром.

Предикат readreal отличается от предиката readint тем, что он считывает не целое, а вещественное число.

Для чтения символа с текущего устройства ввода используется предикат readchar. Есть еще предикат inkey, который так же, как и readchar, читает символ со стандартного устройства ввода. Разница между ними в том, что предикат readchar приостанавливает работу программы до тех пор, пока не будет введен символ, а предикат inkey не прерывает выполнение программы. Если нужно просто проверить, нажата ли клавиша, можно воспользоваться предикатом keypressed, не имеющим аргументов.[9]

Предикат readterm предназначен для чтения сложных термов. У него два параметра: первый входной указывает имя домена, второй параметр конкретизируется термом домена, записанного в первом параметре. Если считанная этим предикатом строка не соответствует домену, указанному в его первом параметре, предикат выдаст сообщение об ошибке.

Для записи данных в текущее устройство записи служит предикат write. Он может иметь произвольное количество параметров. Кроме того, в Турбо Прологе есть еще и предикат writef, который служит для форматного вывода данных.[10]

Для осуществления перехода на следующую строку (возврат каретки и перевод строки) применяется предикат nl, не имеющий параметров.

Описанная ниже группа предикатов служит для преобразования типов.

Предикат upper_lower имеет два аргумента и три варианта использования. Если в качестве первого аргумента указана строка (или символ), а второй аргумент свободен, то второй аргумент будет означен строкой (символом), полученной из первого аргумента преобразованием к нижнему регистру. Если в исходной строке были прописные английские буквы, то они будут заменены строчными. Если же, наоборот, первый аргумент свободен, а второй аргумент - это строка (или символ), то первый аргумент получит значение, равное строке (символу), полученной из второго аргумента преобразованием к верхнему регистру. Если в строке, находящейся во втором аргументе, были строчные английские буквы, то они будут заменены прописными. И, наконец, имеется третий вариант использования. Если и первый, и второй аргументы связаны, то предикат будет истинным только в том случае, если во втором аргументе находится строка (символ), которая получается из строки, находящейся в первом аргументе, путем замены всех прописных английских букв на строчные. В противном случае предикат будет ложным.

Также имеют два параметра и три варианта использования предикаты str_int, str_real. Первый преобразует строку в целое число и наоборот. Второй служит для превращения строки в вещественное число или вещественного числа в строку.

Предикат str_char имеет те же параметры использования и применяется для преобразования односимвольной строки в один символ и наоборот.

Немного по-другому работает предикат char_int. Он позволяет переходить от символа к его ASCII-коду и обратно.

Хотя Пролог - не самый лучший инструмент для выполнения большого объема вычислений, в нем имеются стандартные средства для реализации обычных вычислений. При этом можно использовать четыре арифметических операции (сложение ( + ), вычитание ( - ), умножение ( * ) и деление ( / )), а также целочисленное деление ( div ) и взятие остатка от деления одного целого числа на другое ( mod ). Для сравнения чисел можно воспользоваться операциями равно ( = ), не равно ( <> ), больше ( > ), больше или равно ( >= ), меньше ( < ), меньше или равно ( <= ).

Кроме того, можно использовать обычные математические функции, такие как: логарифмы натуральный ( ln ) и десятичный ( log ), квадратный корень ( sqrt ), модуль ( abs ), экспонента ( exp ). Тригонометрические функции: синус ( sin ), косинус ( cos ), тангенс ( tan ), арктангенс ( arctan ). Величины углов указываются в радианах.

Функция trunc отбрасывает дробную часть своего параметра, а функция round округляет вещественное число до ближайшего целого.

Для вычисления псевдослучайных чисел имеется два варианта предиката random. Первый вариант имеет один выходной параметр, в который помещается сгенерированное вещественное число, лежащее в промежутке между нулем и единицей. Второй вариант этого предиката - двухаргументный. В качестве первого входного аргумента указывается целое число. Второй аргумент означивается целым числом, лежащим между нулем и первым аргументом.

Нуль-местный предикат true всегда истинен, а нуль-местный предикат fail всегда ложен. Предикат fail часто используется для организации поиска с возвратом. Причем размещение какой-либо подцели в теле правила после предиката fail бессмысленно, поскольку в связи с тем, что этот предикат всегда терпит неудачу, цель никогда не будет достигнута.

Одноместный предикат free истинен, если его аргументом является свободная переменная, и ложен в противном случае. Предикат bound, наоборот, истинен, если его аргумент - это связанная переменная, и ложен, если его аргумент свободен.

В Турбо Прологе любой текст, находящийся между символами /* и */, рассматривается как комментарий. Кроме того, любой текст между символом % и концом строки также воспринимается как комментарий. Комментарий отличается от остального текста тем, что он игнорируется компилятором Турбо Пролога. Соответственно, комментарии пишутся не для компилятора, а для человека; для того, чтобы сделать программу более легкой для понимания.

 


 

Глава 2. Практическая часть

Описание задачи

Трое юношей: Коля, Дима и Юра влюблены в трех девушек: Аню, Лену, Вику. Но эта любовь без взаимности. Коля любит девушку, влюбленную в юношу, который любит Лену. Дима любит девушку, влюбленную в юношу, который любит Вику. Лена не любит Юру. Кто кого любит?

 


Дата добавления: 2018-02-28; просмотров: 900; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!