Я пытаюсь использовать платформу CLIPS для iOS со Swift.Я выполнил все настройки, и программа CLIPS работает нормально и успешно завершает вычисления.
Код клипа:
(deftemplate travel-banchmark
(slot name)
(slot value))
(deftemplate permutation
(multislot values))
(deffacts initial
(number-of-place 3)
(travel-banchmark (name place) (value torino))
(travel-banchmark (name place) (value roma))
(travel-banchmark (name place) (value milano))
(travel-banchmark (name place) (value venezia))
(travel-banchmark (name place) (value napoli)))
(defrule first-in-permutation
(number-of-place ~0)
(travel-banchmark (name place) (value ?city))
=>
(assert (permutation (values ?city))))
(defrule next-in-permutation
(number-of-place ?k)
?p <- (permutation (values $?cities))
(test (< (length$ ?cities) ?k))
(travel-banchmark (name place) (value ?city))
(test (not (member$ ?city ?cities)))
=>
(assert (permutation (values ?cities ?city))))
(defrule cleanup
(declare (salience -5))
(number-of-place ?k)
?p <- (permutation (values $?cities))
(test (< (length$ ?cities) ?k))
=>
(retract ?p))
Код Swift:
EnvWatch(clipsEnv,"activations");
EnvWatch(clipsEnv,"facts");
EnvLoad(clipsEnv,filePath);
EnvReset(clipsEnv);
EnvRun(clipsEnv,-1);
EnvPrintRouter(clipsEnv,WPROMPT,"Test");
let expression = "(find-all-facts ((?f permutation)) TRUE)";
var outputValue:DATA_OBJECT_PTR?;
EnvEval(clipsEnv, expression, outputValue)
Во времяоценка EnvEval
Я получил эту ошибку: Thread 1: EXC_BAD_ACCESS (code=1, address=0x8)
без каких-либо других объяснений.
Любое предложение о том, что я могу проверить?Вам нужны другие фрагменты информации?
Редактировать: я изменил эти две строки:
var outputValue: DATA_OBJECT = DATA_OBJECT.init();
EnvEval(clipsEnv, expression, &outputValue)
Теперь этот фрагмент кода работает, но мне сложно понять, почему такие идентификаторы, какGetValue
неразрешены