2017-05-27 5 views
1

J'essaie d'affirmer un nouveau fait dans CLIPS dans l'application embarquée. J'ai essayé de deux façons: - Le premier utilisant l'assert comme dans l'exemple de la page 74 dans le guide de programmation avancée. - La deuxième méthode utilise assert-string. J'ai essayé le seul chemin de chaque façon et aussi les deux façons ensemble. J'utilise le module RUN_TIME. Mon code génère les bonnes constructions (defrules et deftemplates) mais le nouveau fait n'est pas affirmé. Seul le fait initial est là. Je ne sais pas pourquoi!Impossible d'affirmer des faits dans les clips de l'application intégrée

Voici mon code:

#include "clips.h" 

int main() 
{ 
    void *theEnv, *newFact, *templatePtr; 
    DATA_OBJECT theValue; 

    extern void *InitCImage_1(); 
    theEnv = InitCImage_1(); 

    EnvReset(theEnv); 

    // One way 
    templatePtr = EnvFindDeftemplate(theEnv, "Navigation"); 
    newFact = EnvCreateFact(theEnv, templatePtr); 
    if (newFact == NULL) return -1; 

    theValue.type = SYMBOL; 
    theValue.value = EnvAddSymbol(theEnv, "Auto"); 
    EnvPutFactSlot(theEnv, newFact, "FlightStatus", &theValue); 

    EnvAssert(theEnv, newFact); 

    // The other way 
    EnvAssertString(theEnv, "(Navigation (FlightStatus Auto))"); 

    EnvRun(theEnv,-1); 

    EnvListDeftemplates(theEnv, "stdout", NULL); 
    EnvListDefrules(theEnv, "stdout", NULL); 
    EnvListDeffacts(theEnv, "stdout", NULL); 
} 

Qu'est-ce qui ne va pas dans mon code?

Répondre

0

Utilisation:

EnvFacts(theEnv,"stdout",NULL,-1,-1,-1); 

Plutôt que:

EnvListDeffacts(theEnv, "stdout", NULL); 

Deffacts sont des constructions qui définissent une liste de faits pour être activé lorsque la commande (reset) est effectuée. Il y a un desffact de faits initial prédéfini qui affirme le (fait initial) quand une réinitialisation est effectuée. C'est ce que vous voyez listé quand vous appelez EnvListDeffacts. Vous voulez appeler EnvFacts à la place pour voir les faits qui ont été réellement affirmés (qu'ils soient créés par un deffact après une réinitialisation ou directement par l'affirmation).

+0

Merci beaucoup @Gary. Ça marche maintenant. –