КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Доступ к программам и обработка программ
Программа 12.2.Чтение спискаслов.
Предикат read_word_list читает литеру С и обращается к процедуре read_word_list(C,Words). В этой процедуре выполняется одно из трех действий в зависимости от значения литеры С. Если С – литера, входящая в слово, т.е. прописнаяили строчная буква, или символ подчеркивания, то обрабатывается следующее слово и далее рекурсивно обрабатывается последовательность оставшихся слов. Второе действие состоит в игнорировании пробелов, т. е. считывается следующая литера, и работа программы рекурсивно продолжается. Если, наконец, встретилась литера, обозначающая конец последовательности слов, то программа завершает работу и возвращает список слов. Существенно, что всегда программа прежде читает литеру, а затем уже проверяет, что следует делать. Если это полезная литера, например литера слова, то она должна быть включена в слово. Иначе литеры могут быть потеряны при возврате. Рассмотрим следующий цикл ввода и обработки: process([ ])¬ get(C), end_of_words_char(C). process ([W | Words])¬ get(C),word _char(C), get_word(C,W), process (Words). Если первая литера слова не удовлетворяет предикату end_of_words_char, то первое предложение не выполнится, а второе предложение приведет к вводу следующей литеры. Возвращаясь к программе 12.2, заметим, что предикат read_words(C,W,C1) читает слово W, начинающееся с текущей литеры С, и возвращает литеру, следующую за словом – С1. Список литер, образующих слово, находится с помощью процедуры word_chars/3 (аргументы те же, что и у процедуры read_words). Слово строится по списку литер с помощью системного предиката name. Процедура words__chars также обладает свойством опережающего просмотра одной литеры, так что литеры не теряются. Такие предикаты, как fill_char/1 и word_char/1, упрощают представление данных в Прологе.
До сих пор предполагалось, что программы размещены в памяти компьютера, и вопрос о том, как они там представлены и каким образом были туда занесены, не рассматривался. Однако многие приложения Пролога зависят от того, как организован доступ к предложениям программы. Более того, если программа должна изменяться во время вычислений, то следует иметь средства, позволяющие добавлять и удалять предложения. Системным предикатом, обеспечивающим доступ к программе, является предикат clause (Head, Body). К цели clause (Head, Body)? можно обращаться, если аргументу Head сопоставлено значение. Ищется первое предложение в программе, заголовок которого унифицируем с термом Head. Далее заголовок и тело этого правила унифицируются с аргументами Head и Body. При возврате каждое предложение унифицируемое с аргументами цели, дает одно решение. Отметим, что доступ к правилам, минуя заголовки, невозможен. Считается, что телом факта является атом true. Конъюнктивная цель изображается с помощью бинарного функтора «,». Впрочем, можно легко абстрагироваться от конкретного представления. Рассмотрим программу 3.12, задающую отношение member
Дата добавления: 2014-01-07; Просмотров: 430; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |