gpt4 book ai didi

iphone - 如何从 .clp(CLIPS) 文件中获取响应?

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:57 24 4
gpt4 key购买 nike

我正在尝试在我的 iPhone 应用程序中加载 .clp 文件。为此,我使用下面的代码

    NSString *filePath = [[NSBundle mainBundle]
pathForResource:@"autodemo" ofType:@"clp"];

environment = CreateEnvironment();
char *clipsFileChar = (char *)[filePath cStringUsingEncoding:NSASCIIStringEncoding];
Load(clipsFileChar);
Reset();
Run(-1);

NSString *evalS = [NSString stringWithFormat:@"(find-all-facts ((?f state-list)) TRUE)"];
char * evalStr = (char *)evalS;

DATA_OBJECT obj;// = {0,-1};
// obj.type = STRING;
// obj.value = evalStr;

int i = Eval(evalStr, &obj);
NSLog(@"%d",i);

现在,当我运行此代码时,Eval(evalStr, &obj) 每次都会给我 0
我正在使用来自 this link 的 autodemo.clp 文件.
那么,如何使 Eval() 命令工作以及如何获得 clp 文件返回的响应?

谢谢,

最佳答案

下面的代码解决了我的问题,希望对其他人有帮助.. :)


InitializeEnvironment();
Clear();

NSString *filePath = [[NSBundle mainBundle]
pathForResource:@"autodemo" ofType:@"clp"];
char *clipsFileChar = (char *)[filePath cStringUsingEncoding:NSASCIIStringEncoding];

IncrementGCLocks();
Load(clipsFileChar);
Reset();
Run(-1);
DecrementGCLocks();

[self nextUIState];

- (void)nextUIState
{
DATA_OBJECT theDO;
NSString * evalS = @"(find-all-facts ((?f state-list)) TRUE)";
char *evalStr = (char *)[evalS cStringUsingEncoding:NSASCIIStringEncoding];

int j = EnvEval(GetCurrentEnvironment(), evalStr, &theDO);
NSLog(@"j = %d",j);

if(factDict)
{
[factDict release];
factDict = nil;

factDict = [[NSMutableDictionary alloc] init];
}

id value = [self objectForDataObject:&theDO];

NSLog(@"%@",[value description]);
}

-(id) objectForDataObject: (DATA_OBJECT*) arg
{
switch(arg->type)
{
case FACT_ADDRESS:
{

DATA_OBJECT data = { 0 };
struct fact* aFact = (struct fact*) arg->value;

if(EnvGetFactSlot(GetCurrentEnvironment(),aFact,(char*)[@"current" UTF8String],&data))
{
[factDict setObject:[self objectForDataObject: &data] forKey:@"current"];
[factDict retain];
}
return factDict;
}
case SYMBOL:
{
NSString *str = [NSString stringWithUTF8String: ValueToString(arg->value)];
if ([str isEqual: @"nil"]) return nil;
if ([str hasPrefix: @"<<<"] && [str hasSuffix: @">>>"])
{
return [self dataFromSymbolString: str];
}
return str;
}
case STRING:
{
return [NSString stringWithUTF8String: ValueToString(arg->value)];
}
case INTEGER:
{
return [NSNumber numberWithInt: ValueToInteger(arg->value)];
}
case FLOAT:
{
return [NSNumber numberWithDouble: ValueToDouble(arg->value)];
}
case EXTERNAL_ADDRESS:
{
return (id) arg->value;
}
case MULTIFIELD:
{
int i, count = GetpDOLength(arg);
NSMutableArray *args = [NSMutableArray arrayWithCapacity: count];
FIELD_PTR fptr = (FIELD_PTR) GetMFPtr(GetpValue(arg),GetpDOBegin(arg));
for(i = 0; i < count; ++i, ++fptr)
{
DATA_OBJECT dobj;
dobj.type = fptr->type;
dobj.value = fptr->value;
[args addObject: [self objectForDataObject: &dobj]];
}
return args;
}
default:
return nil;
}
}

如果您发现任何其他更好的方法(当然有),请告诉我。 :)

关于iphone - 如何从 .clp(CLIPS) 文件中获取响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11723202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com