Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1.1.Глава1_бакалавры.docx
Скачиваний:
51
Добавлен:
22.02.2015
Размер:
560.23 Кб
Скачать

1.3. Факты и правила

Фактом называется дизъюнкт, состоящий из одного литерала: lykes(george, mary).

Правилом называется дизъюнкт, состоящий из головы, представляющей собой положительный литерал, и тела, образуемого комбинацией нескольких литералов. Голова отделяется от тела «прологовской стрелкой», повернутой в правлении головы, – символом (:–). Например, правило:

lykes(george,Y):- woman(Y), lykes(Y, books).

утверждает: «ЕСЛИ Y – женщина и она любит книги, ТО Y нравится Джорджу». Заметим, что переменные в голове правила находятся под действием квантора всеобщности (ᴠх – «все х»), а переменные в теле правила – под действием квантора существования (Ǝх – «хотя бы один х»).

Итак, правила Пролога интерпретируются как ГОЛОВА ← ТЕЛО. Это читается как «Если ТЕЛО, то ГОЛОВА». Таким образом, условием справедливости (true) ГОЛОВЫ, является справедливость ТЕЛА правила. Если ГОЛОВА справедлива без всяких условий, то это считается фактом (сразу после ГОЛОВЫ ставится точка).

1.4. Пролог-программа. Цель

Пролог-программа состоит из множества предложений (утверждений), каждое из которых является либо фактом (без условий), либо правилом (с условиями, заданными телом правила). Набор фактов часто называют базой данных, а все вместе (факты и правила) – базой знаний. Чтобы привести базу знаний в движение, в конце файла базы знаний нужно задать цель логического вывода: т. е. поставить вопрос. Синтаксически: знак вопроса, тире и совокупность литералов, подобную ТЕЛУ правила, например, спросит у Пролог-программы: «Кто нравится Джорджу?», можно так:

?-lykes(george,X). Пролог найдет ответ: X = mary.

Как он это делает – разберем позже в разделе Детали этой главы.

1.5. Начало работы на swi-Пролог

Теперь мы вооружены минимальным набором знаний и можем потренироваться в составлении и запуске простейших Пролог-программ. Пролог-программа пишется в обычном текстовом редакторе, работающем с ASCII-кодами, например, в Блокноте (но не в Worde, работающем с графическими символами

1.5.1 Написание, запуск и отладка пролог-программы

В последних версиях SWI-Prolog разработчики ввели хорошо совместимый со средой разработки текстовый редактор написания пролог-программ. Мы им и воспользуемся. Редактор вызывается с помощью ключевого слова (предиката!) emacs, которое надо ввести в качестве цели верхнего уровня (top level) сразу же после запуска SWI-Prolog (файл swipl-win.exe).

1.5.2 Предикаты ввода и вывода

Чтобы увидеть результаты работы Пролога, нам необходимы предикаты ввода с клавиатуры и вывода на экран монитора. В системе SWI-Prolog имеется множество встроенных предикатов, готовых к непосредственному использованию. Мы будем осваивать их по ходу изучения приемов программирования на Прологе. Вначале, например, мы можем воспользоваться для ввода с клавиатуры встроенным предикатом read(), а для вывода на экран предикатом write().

1.5.3 Первая программа на Прологе

Итак, наберем в стандартном Блокноте простую пролог-программу, вставим ее в среду Пролога с помощью встроенного предиката consult(‘Путь к файлу программы’) и посмотрим, как она работает. Текст программы приведен в Листинге 1.1, а результаты ее работы показаны на рис.1.1.

Листинг 1.1.  Первая программа на Прологе

run:-

do_something, %сделать нечто (поприветствовать)

nl, write(' -OK, bye!').

do_something:-

nl, write('SWI-Prolog приветствует Вас!').

?- run.

Рис.1.1. Первая программа на Прологе (листинг 1.1)

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

Детали