Унификация, переименование правил и бюджет глубины
Двунаправленная унификация, переименование переменных правил, поиск утверждений, конъюнкция, дизъюнкция, отрицание как неудача и бюджет глубины.
Вопрос для размышления
Какие дополнительные механизмы позволяют сопоставлять запрос не только с сохраненными фактами, но и с выводами, полученными из переиспользуемых правил?
Унификация переменных, появляющихся по обе стороны сравнения
Переход по существующему связыванию переменной перед расширением кадра
Переименование каждой переменной правила для каждого применения
Применение правила путем унификации его заключения и вычисления его тела
Комбинирование and, or и конечного отрицания как неудачи над списками кадров
Ограничение рекурсивного применения правил явной оставшейся глубиной
unify-match обобщает простое сопоставление с утверждениями. Любой входной элемент может быть переменной, а существующее связывание может вести к другой переменной или структуре до завершения сравнения. Перед каждым применением правила rename-rule заменяет каждую логическую переменную новым ключом с текущим идентификатором применения правила. Это предотвращает конфликт внутренних промежуточных имен правила с переменными запроса или другим применением того же правила.
simple-query объединяет прямые совпадения с утверждениями и результаты правил. Результат правила унифицирует шаблон запроса с переименованным заключением, затем передает полученный кадр через qeval в тело правила. and передает кадры по конвейеру, or объединяет альтернативы, а not сохраняет кадр только тогда, когда его подзапрос не дает результата в этом кадре. Явная глубина служит точной конечной границей ресурсов для раскрытия правил.
Проследите путь шаблона запроса к прямому сопоставлению с утверждениями, а затем к каждому переименованному заключению правила. Проверьте новые ключи переменных перед тем, как тело grandparent поступит в conjoin. Для запроса parent с отрицанием покажите, почему carol отклоняется, а dave сохраняется. Убедитесь, что обе ветви or начинаются с одного и того же пустого входного кадра.
Попробуйте сами
Измените программу и сравните результат.
Добавьте правило ancestor с прямым предложением parent и рекурсивным предложением. Запустите его с depth 4 и depth 1, выведите ответы раздельно и объясните, как бюджет работы определяет границу результатов.
Показать подсказку
Используйте два правила с одинаковым заключением ancestor. Рекурсивное тело должно вводить одну новую промежуточную переменную и вызывать ancestor с оставшимся бюджетом глубины.