clips 6.3 CLIPSDLL.h Как изменить факт из c? - PullRequest
0 голосов
/ 01 июля 2018

Я использую клипы 6.3. (CLIPSDynamic32) общий dll

#include "CLIPSDLL.h"
#include "cstrcpsr.h"
#include <locale.h>
#include <stdio.h>
#include "clips.h"
Environment *theEnv;

void main(int argc, char** argv)
{
    int ret;
    theEnv = __CreateEnvironment();
    int status = __Load(theEnv, "H:\\ClipsIntegrationExample\\clips1.clp");

    __Reset(theEnv);
    __AssertString(theEnv, "(templ1(name1 yes))");
    __Run(theEnv,-1);


    __DestroyEnvironment(theEnv);
    getch();
}

Это файл клипов clp

(deftemplate MAIN::templ1
    (slot name1))

Как изменить факт из c?

1 Ответ

0 голосов
/ 03 июля 2018

Получите индекс факта, созданный AssertString, и затем создайте строку, которая может быть передана в функцию Eval для изменения факта. Например:

"(do-for-fact ((?f templ1)) (= (fact-index ?f) 2) (modify ?f (name1 xyz)))"

См. Также При встраивании CLIPS в язык C, какую функцию можно использовать для изменения факта из программы на C

...