- •Глава 1
- •Глава 2 системы, основанные на знаниях
- •Глава 3
- •Глава 4 представление знаний
- •Глава 5 инженерия знаний
- •Глава 6
- •Часть 2
- •Variable имя_переменной
- •60 11 /Mod swap drop
- •16 Base ! ,
- •If a then или if a else в then
- •1 Of a endof
- •2 Of в endof 3 of с endof drop endcase
- •Слова literal (в), слова ; (с). Переменная ip переводится словом периода выполнения в положение сброшенного указателя
- •Глава 7 обработка списков
- •И ыный
- •Глава 8 методы программирования
- •Рекурсии)
- •Глава 9
- •Правило: имеет-волос-покров1
- •Правило: имеет-волос-покров2 (имеет-волос-покров )
- •Предложения нуль установить предложения чтсп
- •Р ис. 9.3. След поиска
- •If добавить-цели then ;
- •4 Begin (поиск)
- •10 Else
- •Глава 10
- •Глава 11
- •Begin dup ноль not
- •While r@ связь
- •If 2drop
- •If получить-цель @ найти-предложение?
- •If добавить-цели false
- •If false else false true then
- •Имёет-рыже-корич-окрас имеет-темиые-пятна ) 14
- •Глоссарий
- •Часть I. Экспертные системы - системы, основанные на знаниях
- •Часть 2. Построение систем,
ХВОСТ ПЕРВЫЙ ХВОСТ РЕШЕНИЯ DUP @ ХВОСТ ХВОСТ
УСТАНОВИТЬ НАЙТИ-ПРЕДЛОЖЕНИЕ? DUP
If добавить-цели then ;
Э краны 60, 61. Интерпретатор правил Пролога: ПОЛУЧИТЬ-ЦЕЛЬ, НАЙТИ-ПРЕДЛОЖЕНИЕ, НАЙТИ-ПРЕДЛОЖЕНИЕ? и ВОЗВРАТ
206
207
ЦЕЛИ: (КОЗЕЛ) РЕШЕНИЯ: НУЛЬ
ЦЕЛИ: (БОРЬКА) РЕШЕНИЯ: (КОЗЕЛ БОРЬКА)
ЦЕЛИ: (ГРУБИЯН) РЕШЕНИЯ: (КОЗЕЛ ГРУБИЯН)
ЦЕЛИ: (МЛЕКОПИТАЮЩЕЕ ИМЕЕТ-РОГА) РЕШЕНИЯ: (КОЗЕЛ МЛЕКОПИТАЮЩЕЕ ИМЕЕТ-РОГА)
ЦЕЛИ: (ДАЕТ-МОЛОКО ИМЕЕТ-ВОЛОС-ПОКРОВ ИМЕЕТ-РОГА) РЕШЕНИЯ: (МЛЕКОПИТАЮЩЕЕ ДАЕТ-МОЛОКО
ИМЕЕТ-ВОЛОС ПОКРОВ) (КОЗЕЛ МЛЕКОПИТАЮЩЕЕ ИМЕЕТ-РОГА)
ЦЕЛИ: (ИМЕЕТ-ВОЛОС-ПОКРОВ ИМЕЕТ-РОГА) РЕШЕНИЯ: (ДАЕТ-МОЛОКО)
(МЛЕКОПИТАЮЩЕЕ ДАЕТ-МОЛОКО ИМЕЕТ-ВОЛОС- ПОКРОВ)
(КОЗЕЛ МЛЕКОПИТАЮЩЕЕ ИМЕЕТ-РОГА)
ЦЕЛИ: (ГРУБИЯН ИМЕЕТ-РОГА)
РЕШЕНИЯ: (ИМЕЕТ-ВОЛОС-ПОКРОВ ГРУБИЯН)
(ДАЕТ-МОЛОКО)
(МЛЕКОПИТАЮЩЕЕ ДАЕТ-МОЛОКО . ИМЕЕТ-ВОЛОС-ПОКРОВ)
(КОЗЕЛ МЛЕКОПИТАЮЩЕЕ ИМЕЕТ-РОГА)
ЦЕЛИ: (ИМЕЕТ-РОГА)
РЕШЕНИЯ: (ИМЕЕТ-ВОЛОС-ПОКРОВ)
(ДАЕТ-МОЛОКО)
(МЛЕКОПИТАЮЩЕЕ ДАЕТ-МОЛОКО ИМЕЕТ-ВОЛОС-ПОКРОВ)
(КОЗЕЛ МЛЕКОПИТАЮЩЕЕ ИМЕЕТ-РОГА)
ЦЕЛИ: НУЛЬ
РЕШЕНИЯ: (ИМЕЕТ-РОГА ИМЕЕТ-ВОЛОС-ПОКРОВ)
(ДАЕТ-МОЛОКО)
(МЛЕКОПИТАЮЩЕЕ ДАЕТ-МОЛОКО ИМEЕТ-ВОЛОС-ПОКРОВ)
(КОЗЕЛ МЛЕКОПИТАЮЩЕЕ ИМЕЕТ-РОГА)
УСПЕШНОЕ ЗАВЕРШЕНИЕ
Рис. 9.4. Еще одна трасса выполнения слова ПОИСК с возвратом в первых двух фреймах
208
ложения, ВОЗВРАТ вызывает слово НАЙТИ-ПРЕДЛОЖЕНИЕ. При успешном завершении поиска новые цели из подобранного предложения посредством вызова ДОБАВИТЬ-ЦЕЛИ добавляются к списку ЦЕЛИ. Если подходящего предложения не оказалось, поиск завершается неудачей. ВОЗВРАТ возвращает в стек флаг, означающий успех или неудачу.
Теперь нам осталось лишь объяснить два второстепенных слова из определения ПОИСК. Слово ДОБАВИТЬ-ЦЕЛИ выбира- ет цели из списка, на который ссылается первый указатель предложения, и присоединяет его к списку ЦЕЛИ. Достижение це- лей в списке РЕШЕНИЯ нетривиально - чередованием слов ПЕР- ВЫЙ и ХВОСТ. Выражение РЕШЕНИЯ @ ХВОСТ осуществляет перемещение за первую цель в списке РЕШЕНИЯ, возвращая в качестве результата оставшуюся часть данного списка. Затем слово ПЕРВЫЙ возвращает список, содержащий предложения, - урезан- ный посредством слова ХВОСТ список ПРЕДЛОЖЕНИЯ. Следую- щее вхождение слова ПЕРВЫЙ возвращает первое предложение из этого списка, а последнее слово ХВОСТ перемещается за заголо- вок. Оставшаяся часть представляет собой список, содержащий цели первого предложения.
Слово ПОЛУЧИТЬ-ЦЕЛЬ восстанавливает первый элемент из списка ЦЕЛИ и удаляет его, превращая этот список в его хвост. Помимо перечисленных слов, нам требуются три списка, которые занимают небольшой объем памяти и показаны на экране 60.
Кроме собственно слова ПОИСК, на экранах с 63 го по 65-й описаны несколько дополнительных слов для пользовательского интерфейса и отладки. В Прологе запрос цели может быть осуще- ствлен следующим образом:
?- цель
Здесь приводится еще одно похожее слово, которому, правда, нужно задавать список целей. Чтобы доказать цель, нужно набрать:
?-(ЦЕЛЬ)
Слово ?- для получения списка целей, находящихся в списке ЦЕЛИ, использует слово ЧТСП. Это слово опустошает список РЕШЕНИЯ, подготавливая его для нового поиска. Ответом на запрос будет лиое УСПЕХ, либо НЕУДАЧА- Если вы хотите уви- деть следы поиска, то можно встроить в ?- слово СЛЕД (как было показано ранее), для чего необходимо выполнить переустановку вектора вычисления ВЫВОД на СЛЕД:
‘ СЛЕД IS ВЫВОД
В исходном состоянии вектор ВЫВОД установлен на слово ПОИСК, которое не оставляет следов.
209
63
О Ч ИНТЕРПРЕТАТОР ПРАВИЛ ПРОЛОГА 1
2 ( -> ФЛАГ) \ ФЛАГ * ИСТИНА => УСПЕХ
3 : ПОИСК