У меня есть ряд правил и набор исходных (assert
) фактов. Теперь я хочу добавить эти факты, запустить правила, а затем применить другой набор правил, чтобы проверить, содержат ли текущие существующие факты после (run)
правильные факты и ничего больше, без запуска предыдущих правил и без уничтожения текущих фактов. Затем я хочу продолжать применять новые факты, запускать новые правила, проверять новые вставленные факты и т. Д.
Как я могу это сделать? Мой тестовый (пакетный) файл выглядит примерно так:
(clear) ; just in case
(load constructs.clp) ; All loaded in the MAIN module.
(assert (blabla))
(assert (blabla2))
(run)
;; Code (rules/functions... I'm still wondering how to do it) to check
;; current facts
(assert (blabla3))
(assert (blabla4))
(run)
;; More tests.
(exit)
Я пытался создать для каждого deftemplate T
a deftemplate T-copy
с одинаковыми слотами, и они применяют факт (assert (testing))
, чтобы сначала сделать копии. Затем я запускаю набор правил с целью тестирования и большей важностью, который «останавливает» выполнение (run)
, когда оно выполнено, чтобы избежать применения предыдущих правил (правил, которые я тестирую). Проблема с этим подходом, помимо того, что требуется слишком много шагов, состоит в том, что я не знаю значимости исходных правил и поэтому не могу быть уверен, что правила тестирования будут иметь больший приоритет.
Мне известны конструкции defmodule
и стек фокусировки, но я их еще не понял. Если мои предположения верны, я думаю, что я мог бы поместить все свои правила тестирования в конкретный модуль и сосредоточить внимание на этом модуле, чтобы избежать выполнения любого ГЛАВНОГО правила. Если что-то не так, я (halt)
выполнение по одному из правил тестирования или просто (exit)
пакетный скрипт. Если все в порядке, я выталкиваю модуль тестирования, чтобы вернуться в MAIN, добавляю еще раз assert, (run)
, и они снова толкают модуль тестирования с новыми тестами, чтобы проверить, все ли по-прежнему правильно.
Но я не уверен, что мои предположения верны. Я хотел бы увидеть пример того, как мне проводить тестирование.
PD: Кроме того, моя версия CLIPS не поддерживает запросы по фактам.