Пример 9. Преобразование строки в список атомов.

Domains

namelist=name*

name=symbol

Predicates

string_namelist(string,namelist)

Clauses

string_namelist(S,[H|T]):-fronttoken(S,H,S1),!,string_namelist(S1,T).

string_namelist(_,[]).

Встроенный предикат (findall).

Встроенный предикат findall(X,P,L) порождает список L всех объектов X, удовлетворяющих цели P.

 

Пример 10. Вычисление среднего возраста.

 

Domains

name, address = string

age = integer

list = age*

Predicates

person(name, address, age)

sumlist(list, age, integer)

Goal

findall(Age, person(_, _, Age), L), sumlist(L, Sum, N), Ave = Sum/N, write("Average =", Ave), nl.

 

Clauses

sumlist([], 0, 0).

sumlist([H|T], Sum, N) :- sumlist(T, S1, N1), Sum=H+S1, N=1+N1.

person("Sherlock Holmes", "22B Baker Street", 42).

person("Pete Spiers", "Apt. 22, 21st Street", 36).

person("Mary Darrow", "Suite 2, Omega Home", 51).

 

Ввод данных.

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

 

Readln(StringVariable)

(string) - (o)

Считывает строку с текущего устройства ввода и связывает ее с заданной переменной StringVariable. Обычно чтение производится с клавиатуры. В качестве конца строки используется символ возврата каретки. Readln считывает до 150 символов в строке при вводе с клавиатуры и до 64К при вводе с других устройств.

 

Readint(IntgVariable)

(integer) - (o)

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

 

Readreal(RealVariable)

(real) - (o)

Читает действительное число с текущего устройства чтения и связывает его с заданной переменной RealVariable. Обычно чтение производится с клавиатуры.

Readchar(CharVariable)

(char) - (o)

Читает символ с текущего устройства ввода и связывает его с заданной переменной CharVariable. В отличие от inkey устанавливает режим ожидания ввода.

 

Inkey(CharVariable)

(Char) - (o)

Читает символ со стандартного устройства ввода. В отличие от предиката readchar выполнение программы не прерывается. Поэтому inkey применяют главным образом для организации циклов ожидания.

 

Keypressed

Выполняется успешно, если нажата некоторая клавиша. В отличие от предиката inkey с помощью keypressed можно установить, нажата ли клавиша, не читая при этом введенный с клавиатуры символ.

 

Вывод.

 

write( Variable|Constant * )

Запись заданных значений переменных и констант в заданное активное окно на текущем устройстве вывода.

 

nl(Вызывает возврат каретки и перевод строки).

 

 








Дата добавления: 2016-05-05; просмотров: 481;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.