Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Стандартные предикаты обработки списков.
В системе Arity Prolog определены следующие предикаты для работы со списками: · length(L,N)¾ истинен, если N ¾ число элементов в списке L; предикат length(L,N) можно использовать для определения длины списка. · sort(L1,L2) ¾ истинен, если список L2 получен из списка L1 путем упорядочения элементов по возрастанию и удаления повторяющихся элементов. · bagof(X, p(X) ,L) ¾ истинен, если список L ¾ список таких термов X, для которых предикат p(X) истинен. Список L не упорядочивается, повторяющиеся элементы в списке не удаляются. · setof(X, p(X) ,L) ¾ истинен, если список L ¾ список таких термов X, для которых предикат p(X) истинен. Список L упорядочивается, повторяющиеся элементы в списке удаляются. Если нет термов Х, для которых предикат p(X) истинен, то предикат setof(X, p(X) ,L) имеет значение «ложь». · findall(X, p(X) ,L) ¾ истинен, если список L ¾ список таких термов X, для которых предикат p(X) истинен. Список L упорядочивается, повторяющиеся элементы в списке не удаляются. Если нет термов Х, для которых предикат p(X) истинен, то предикат setof(X, p(X) ,L) имеет значение «истина» при подстановке L=[].
Пример использования предиката findall.
Пусть требуется определить средний возраст сотрудников фирмы, информация о которых хранится в базе данных, представленной в виде фактов: person(‘Иванов’,30, m). person(‘Зайцев’,28, m). person(‘Петрова’,25, w). person(‘Захарова’,32, w). person(‘Зубков’,41, m). person(‘Судакова’,30, w). В правиле middl_age можно использовать предикат findall следующим образом: middl_age:¾ findall(A, person(_,A,_),L),length(L,N), sumlist(L,S), Age is S/N, write(‘Средний возраст = ’), write(Age). sumlist([],0). sumlist([H|L],S):¾ sumlist(L,S1), S is S1+H.
Стандартные предикаты обработки строк. В системе Arity Prolog определены следующие предикаты для работы со строками: · atom_string(A,S) обращает символьный атом A в строку S. · concat(S1,S2,R) ¾ истинен, если строка R есть результат объединения (конкатенации) строк или атомов S1 и S2. · concat(S1,S2,…,Sn,R) ¾истинен, если строка R есть результат объединения (конкатенации) строк или атомов S1, S2,…Sn. · float_text(Fl, S ,For) обращает вещественное число Fl в строку S по формату For. Аргумент For может принимать одно из трех значений: o general ¾ незначащие нули числа при формировании строки игнорируются; o fixed(N) ¾ число с фиксированной точкой, число цифр после десятичной точки равно N; o scientific(N) ¾ число с плавающей точкой в полулогарифмической форе представления, число знаков мантиссы равно N. · int_text(Int, S ) обращает целое число Int в строку S или наоборот. · name(A,L) ¾ истинен, если список L ¾ список кодов ASCII символов атома A. · list_text(L, AS) обращает список L печатаемых символов алфавита в строку AS. · read_string(L,S) ¾ всегда истинен и возвращает строку S длина которой не больше L, строка вводится с клавиатуры. · string_length(S,L) ¾ истинен, если L есть длина строки S. · string_search(Sub,S,L) ¾ истинен, если Sub подстрока строки S, начинающаяся с позиции L. · substring(InSt,N,L, OutSt) ¾ истинен, если OutSt есть подстрока строки InSt, начинающаяся с позиции N и длина которой равна L. Таким образом, очевидно, что версия Arity Prolog обладает мощными встроенными средствами для обработки текстов на естественном языке.
Система программирования Arity Prolog 5.0. |
||
Последнее изменение этой страницы: 2018-04-12; просмотров: 537. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |