Правило как цепочка меньших целей
Вычислитель запросов просматривает утверждения, раскрывает правило и передает каждый полученный кадр от одной цели тела правила к следующей.
Как правило сохраняет промежуточное связывание, необходимое для его следующей цели?
- Представление фактов, запросов, переменных и правила в виде цитированных данных
- Возврат одного кадра связываний для каждого совпадающего утверждения
- Раскрытие заголовка правила в упорядоченную последовательность целей тела
- Передача каждого успешного кадра в следующую цель
Первая программа сравнивает предикат parent и фиксированную позицию ada с каждым утверждением. Каждое совпадение возвращает кадр, содержащий одно связывание child. Процедура scan-assertions доходит до конца конечного списка фактов, поэтому оба совпадающих кадра остаются в порядке утверждений.
Вторая программа связывает grand из заголовка правила, затем solve-goals обрабатывает две цели parent по порядку. Первая цель дает промежуточные значения ben и dia. Каждый кадр становится входными данными для второй цели, которая находит cy и eli. Вычислитель урока обрабатывает прямые факты parent и одно упорядоченное тело правила parent, сохраняя каждый промежуточный кадр.
- Вывод
- —
- Значение
- —
- Диагностика
- —
Просмотр утверждений возвращает (((child . ben)) ((child . dia))). Раскрытие правила возвращает (cy eli).
В первом запуске проследите за каждым сравнением утверждений и двумя расширениями кадра для child. Во втором запуске проследите за связыванием grand в первой цели, затем убедитесь, что промежуточные кадры ben и dia передаются во вторую цель перед тем, как child станет cy или eli. Трассы выполнения фиксируют точный просмотр базы данных и упорядоченное вычисление тела правила.
Измените программу и сравните результат.
Добавьте (parent cy fox), затем измените второй запрос на (grandparent ben (var who)). Предскажите возвращаемый ответ.
Показать подсказку
Первая цель связывает middle с cy, а новый факт позволяет второй цели связать child с fox.