Функция Find-All-Facts возвращает «Невозможно найти deftemplate XXX», после того как я ввел модули - PullRequest
1 голос
/ 14 апреля 2019

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

Теперь, когда я вызываю функцию find-all-facts, она всегда возвращает

"Unable to find deftemplate 'XXX'".

Например, мой запрос выглядит так:

(find-all-facts ((?f PlannerGoal )) TRUE)

Дефемплан PlannerGoal находится в модуле ПЛАНИРОВАНИЕ.

Я тоже пытался сделать:

(find-all-facts ((?f PLANNING::PlannerGoal )) TRUE)

Но ничего не меняется. Я запускаю эту функцию после выполнения команды (run).

Похоже, я чего-то не понимаю?

Спасибо!

1 Ответ

0 голосов
/ 14 апреля 2019

Наиболее вероятное объяснение состоит в том, что текущий модуль, в котором вы выполняете команду find-all-all-фактически * , не импортирует deftemplate PlannerGoal.

         CLIPS (6.31 4/1/19)
CLIPS> (defmodule PLANNING (export ?ALL))
CLIPS> (deftemplate PlannerGoal (slot id))
CLIPS> (defmodule MAIN (import PLANNING ?ALL))
CLIPS> (assert (PlannerGoal (id 1)))
<Fact-1>
CLIPS> (assert (PlannerGoal (id 2)))
<Fact-2>
CLIPS> (find-all-facts ((?f PlannerGoal)) TRUE)
(<Fact-1> <Fact-2>)
CLIPS> (defmodule EMPTY)
CLIPS> (find-all-facts ((?f PlannerGoal)) TRUE)
[PRNTUTIL1] Unable to find deftemplate PlannerGoal.
CLIPS> (focus PLANNING)
TRUE
CLIPS> (find-all-facts ((?f PlannerGoal)) TRUE)
(<Fact-1> <Fact-2>)
CLIPS> (get-current-module)
PLANNING
CLIPS> 
...