Пример запроса к программе 1



? — otvet(0.3,-0.1).

заданная точка принадлежит области D

YES

 

Пример 2.

Программа определяет значение функции y в зависимости от условия по следующим формулам:

 

Программа 2.

variant1(A,B):- number(A), number(B),A>0,B<0.

variant2(A,B):- number(A), number(B),A>0,B>=0.

variant3(A,B):- number(A), number(B),A=<0.

calc_Y(A,B):- variant1(A,B),Y is A*B^2,write(‘Y= ‘),write(Y).

calc_Y(A,B):- variant2(A,B),Y is A^3,write(‘Y= ‘),write(Y).

calc_Y(A,B):- variant3(A,B),Y is 0,write(‘Y= ‘),write(Y).

 

Пример запроса к программе 2.

? — calc_Y(0.3,-0.1).

Y=0.003

YES

6.5. Предикаты ввода¾вывода термов и символов.

Предопределенные предикаты стандартного ввода/вывода являются внелогическими, так как выходят за рамки модели логического программирования. Такие предикаты в процессе вычисления запросов порождают побочный эффект. Любой язык программирования должен обеспечивать средства ввода/вывода информации. Однако вычислительная модель Пролога препятствует введению операций ввода/вывода в виде чистых компонентов языка. 

В системах программирования на языке Пролог используются предопределенные предикаты для ввода/вывода термов и символов.

 

Ввод/вывод термов.

 

Для ввода термов со стандартного устройства ввода ПЭВМ (клавиатуры) используется предикат read(<терм>). Предикат read читает терм, набираемый пользователем на клавиатуре; после вводимого терма должна обязательно следовать точка. Если переменная не конкретизирована, то запрос: 

?¾read(X).

приведет к вводу терма с клавиатуры, и этот терм будет присвоен в качестве значения переменной X.

Для вывода термов на стандартное устройство вывода ПЭВМ (экран видеомонитора) используется предикат write(<терм>). Предикат write выводит терм на экран. В качестве термов могут выдавать на экран константы, значения конкретизированных переменных и составные термы. Если переменная не конкретизирована, то вместо ее значения будет выдано соответствующее переменной ссылочное число.

Предикат nl используется для перехода на новую строку при выдаче данных на экран. Предикат tab(N) используется для выдачи на экран N пробелов. Предикаты nl и tab применяются только совместно с предикатов write.

 

Примеры программ, использующих предикаты ввода/вывода.

Пример 1. Программа ввода элементов списка заданной длины.

vvlist : ¾ write(‘задайте длину списка’), read(N), vvodlist(N,L),

write(‘L= ’), write(L).

vvodlist(0,[]).

vvodlist(N,L) : ¾N>0,write(‘введите элемент списка: ‘), read(X),

                       N1 is N-1, vvodlist(N1,L1), append(L1,[X],L).

append([],L,L).

append([H|L],M,[H|R]): ¾ append(L,M,R).

 

В ответ на запрос

? ¾ vvlist.

система выдаст на экран следующие сообщения:

 

Задайте длину списка

3.

Введите элемент списка: a.

Введите элемент списка: b.

Введите элемент списка: c.

L=[a,b,c]

 

Пример 2. Программа pech_list выдает на экран длину списка.

 

pech_list(L) : ¾ length(L,N), write(‘Длина списка ‘),

                  write(L), write(‘=’) , write(N) , write(‘.’).

 

В ответ на запрос

? ¾ pech_list([a,b,c,d]).

система выдаст на экран строку:

Длина списка [a,b,c,d]=4.

 

Для выдачи на экран списка можно использовать стандартный предикат write(<список>) или написанную пользователем рекурсивную процедуру выдачи на экран элементов списка.

Предикат writelist (X) выдает на экран элементы списка X. Схема отношения этого предиката имеет вид:

writelist(<список>).

Процедура writelist(X) состоит из двух правил:

writelist(X): ¾length(X,N), N=:=0,!, write(‘Список пуст’).

writelist(X): ¾wrl(X).

wrl([]):¾nl,write(‘Конец списка’).

wrl([H|T]): ¾write(H),write(‘ ‘),wrl(T).

 

 

Ввод/вывод символов.

 

Для ввода символов (литер), набираемых на клавиатуре, могут использоваться предикаты get(<литера>) и get0(<литера>). Предикат get(X) вводит любую литеру, для которой существует код ASCII, и присваивает ее переменной X. Предикат get0(X) вводит только печатаемые символы, а управляющие символы пропускает X. 

Для вывода символов (литер) на экран видеомонитора используется предикат put(<код литеры>). Например, в ответ на запрос

? ¾ put(104), put(101), put(108), put(108), put(111).

система выдаст слово hello.

 


Дата добавления: 2018-04-04; просмотров: 200;