如何获取此变量的值

时间:2016-03-09 13:21:17

标签: ios objective-c clips

我正在使用Clips作为专家系统制作应用程序。我想知道是否有可能收集?result变量的值,或者如何执行一段代码然后得到结果。

- (void)viewDidLoad {
    [super viewDidLoad];
    clipsEnv = CreateEnvironment();
    if (clipsEnv == NULL) return;

    DATA_OBJECT theDO;
    EnvEval(clipsEnv,"(bind ?result (numberp (member$ 'Yes' (create$ 'Yes' ))))",&theDO);

}

我上面提到的是一个例子。我的应用程序使用大的.clp,我无法消除变量,因为它用于进行其他计算。

例如,我想保留?totalDays?inputDays和?variableResultado而不修改任何代码。

(bind ?totalDays (+ (* (nth$ 1 (GetDate)) 365)(* (nth$ 2 (GetDate)) (/ 365 12))(nth$ 3 (GetDate))))(bind ?inputDays (+ (* (- (Decimal (sub-string 7 10 ?FechaNacimiento)) 1900) 365)(* (Decimal (sub-string 4 5 ?FechaNacimiento)) (/ 365 12))(Decimal (sub-string 1 2 ?FechaNacimiento))))(bind ?variableResultado (* (/ (- ?totalDays ?inputDays) 365) 12))

2 个答案:

答案 0 :(得分:0)

回答我自己的问题。一种可能的解决方案是在外部文件中定义全局变量而不是普通变量,然后使用EnvFindDefglobal()EnvGetDefglobalValue()获取结果。这是我找到的可能方法之一。

clipsEnv = CreateEnvironment();
EnvReset(clipsEnv);

if (clipsEnv == NULL){
     string = @"Error";
    return string;
}

filePath = [[NSBundle mainBundle] pathForResource: @"try" ofType: @"clp"];
cFilePath = (char *) [filePath UTF8String];
EnvLoad(clipsEnv,cFilePath);
DATA_OBJECT theDO;
EnvFindDefglobal(clipsEnv, "?*variable*");
EnvGetDefglobalValue(clipsEnv, "variable", &theDO);
string = [NSString stringWithUTF8String:ValueToString(GetValue(theDO))];
return string;

在try.clp文件中:

(bind ?result (numberp (member$ 'Yes' (create$ 'Yes' )))); (defglobal ?*variable* = ?result);

答案 1 :(得分:0)

您不需要将函数的返回值绑定到变量以使用EnvEval检索它:

void *clipsEnv;
DATA_OBJECT theDO;
const char *theString;

clipsEnv = CreateEnvironment();

EnvEval(clipsEnv,"(numberp (member$ 'Yes' (create$ 'Yes' )))",&theDO);
theString = DOToString(theDO);