Потенциальная ошибка Clips 6.4 IDE. Не отображаются факты для выбранного модуля

#clips

#клипы

Вопрос:

Я использую CLIPS 6.4 IDE для целей отладки. Я начал разрабатывать свою экспертную систему, основанную на свойстве правил «значимость», чтобы изменить приоритет правил.

Я думаю, что наилучшей практикой является изменение этого поведения и перенос правил с другим уровнем «значимости» в разные именованные модули.

Когда я использую «salience», я могу легко отлаживать свою программу с помощью IDE (т. Е. Кнопок сброса, запуска и шага).

В «Обозревателе фактов» можно увидеть все текущие активные факты, но когда я использую именованные модули, я ничего не вижу (см. Рисунок ниже):

браузер фактов

С другой стороны, «Agenda browser» работает довольно хорошо:

браузер повестки дня

Итак, отладка приложения без просмотра текущих активных фактов является проблематичной, возможно ли это исправить?

PS: Я запускаю CLIPS IDE 6.4 в Windows 10, x64 Спасибо!

Комментарии:

1. Это ошибка. Пока это не исправлено, вы можете обойти это, либо открыв окно отладки перед выполнением команды сброса, либо выполнив другой сброс для перезапуска программы, если окно отладки уже открыто.

2. Я не знаю почему, но ваш подход не работает для меня. Пробовал выполнить сброс после того, как окно отладки уже открыто, пытался открыть окно отладки до того, как была выдана команда сброса, но все равно это окно ничего не показывает 🙁

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

4. Да, вы правы. Я вернусь с примером кода, когда у меня будет больше времени. Спасибо

Ответ №1:

Вот пример кода, который неправильно отображает факты:

 (defmodule MAIN (export ?ALL))
(deftemplate point (slot x) (slot y))
(deffacts points (point (x 1) (y 2)) (point (x 3) (y 4)))
(defmodule ENTITIES)
(defmodule PLANNING (import MAIN ?ALL))
  

Вот пример кода, который делает:

 (defmodule MAIN (export ?ALL))
(deftemplate point (slot x) (slot y))
(deffacts points (point (x 1) (y 2)) (point (x 3) (y 4)))
(defmodule ENTITIES (import MAIN ?ALL))
(defmodule PLANNING)
  

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

Вы можете исправить эту проблему, удалив начальную настройку для SelectedIndex в файле EntityBrowser.xaml. Эти строки:

 <DataGrid x:Name="moduleDataGridView" ... SelectedIndex="1" ...>

<DataGrid x:Name="entityDataGridView" ... SelectedIndex="1" ...>

<DataGrid x:Name="slotDataGridView" ... SelectedIndex="1" ...>
  

следует изменить на

 <DataGrid x:Name="moduleDataGridView" ... ...>

<DataGrid x:Name="entityDataGridView" ... ...>

<DataGrid x:Name="slotDataGridView" ... ...>
  

Комментарии:

1. Вы имеете в виду, что я должен перестроить проект Clips IDE?

2. Чтобы увидеть, является ли это источником проблемы, да.