Пример 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;