⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clips_bc.cpp

📁 clips专家系统内核打包类,很有参考性.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSFindDefglobal(String* theVar)
		Author		: Mark Tomlinson
		Desc.		: updates globalPtr
		Returns 	: TRUE  on success, FALSE on error
****************************************************************************/
BOOL CCLIPSWrap::CLIPSFindDefglobal(String* theVar)
{
	INITCHK(FALSE)
	CLEARMBUF
	theVar->copy(m_buf);
	globalPtr = (dl_FindDefglobal)(m_buf);
	if(globalPtr == NULL)
		return FALSE;
	return TRUE;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSUndefglobal(void)
		Author		: Mark Tomlinson
		Desc.		: uses globalPtr, updates globalPtr
		Returns 	: TRUE  on success, FALSE on error
****************************************************************************/
BOOL CCLIPSWrap::CLIPSUndefglobal(void)
{
	INITCHK(FALSE)
	if((dl_Undefglobal)(globalPtr))	{
		globalPtr = NULL;
		return TRUE;
		}
	return FALSE;
}

/****************************************************************************
		Function	: CCLIPSWrap::SetConstruct(String* theVar)
		Author		: Mark Tomlinson
		Desc.		: sets the construct:
			ex. "(defglobal ?*x* = 3)"
		Returns 	: TRUE  on success, FALSE on Error
****************************************************************************/
BOOL CCLIPSWrap::SetConstruct(String* theVar)
{
	INITCHK(FALSE)
	CLEARMBUF
	theVar->copy(m_buf);
	if((dl_OpenStringSource)("load-construct",m_buf,0) == 0)
		return FALSE;
	if((dl_LoadConstructsFromLogicalName)("load-construct") == 0)	{
		(dl_CloseStringSource)("load-construct");
		return FALSE;
		}
	(dl_CloseStringSource)("load-construct");
	return TRUE;
}

/****************************************************************************
		Function	: CCLIPSWrap::GetAllFacts(StringArray* buffer)
		Author		: Mark Tomlinson
		Desc.		: returns all facts in buffer
		Returns 	: TRUE on success, FALSE on error or if no facts retrieved
****************************************************************************/
BOOL CCLIPSWrap::GetAllFacts(StringArray* buffer)
{
	String	temp;

	if(buffer == NULL)	{
		return FALSE;
		}
	while(CLIPSNextFactString(&temp))	{
		buffer->Add(temp);
		}
	if(buffer->getm_ItemCount() == 0)	{
		return FALSE;
		}
	return TRUE;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSMemUsed(void)
		Author		: Mark Tomlinson
		Desc.		: returns amount of memory CLIPS has
		Returns 	: memused
****************************************************************************/
long int CCLIPSWrap::CLIPSMemUsed(void)
{
	return (dl_MemUsed)();
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSMemUsed(void)
		Author		: Mark Tomlinson
		Desc.		: returns amount of memory CLIPS has
		Returns 	: memused
****************************************************************************/
BOOL CCLIPSWrap::CLIPSBatch(String* FileName)
{
	char	var[256];

	memset(var,0,256);
	FileName->copy(var);
	return (dl_Batch)(var);
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSFreeMem(void)
		Author		: Mark Tomlinson
		Desc.		: attempts to free all of clips memory
		Returns 	: memused
****************************************************************************/
void CCLIPSWrap::CLIPSFreeMem()
{    
	 (dl_Reset)();
	 (dl_Clear)();
	 (dl_FreeAtomicValueStorage)();
	 (dl_ReleaseMem)(-1L,CLIPS_TRUE);
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSSetHaltExecution(void)
		Author		: Mark Tomlinson
		Desc.		: sets the CLIPS halt flag
		Returns 	: memused
****************************************************************************/
void CCLIPSWrap::CLIPSSetHaltExecution(void)
{
	(dl_SetHaltExecution)(CLIPS_TRUE);
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSMakeInstance(String* Data)
		Author		: Mark Tomlinson
		Desc.		: creates a new COOL object, sets instancePtr to new instance
					  (ex. "(Test of MINE)", assuming a definstance of MINE)
		Returns 	: TRUE on success, otherwise false
****************************************************************************/
BOOL CCLIPSWrap::CLIPSMakeInstance(String* Data)
{
	INITCHK(FALSE)
	if(Data==NULL)
		return FALSE;
	CLEARMBUF
	Data->copy(m_buf);
	//attempt the MakeInstance call
	if((instancePtr = (dl_MakeInstance)(m_buf)) == NULL)
		return FALSE;
	return TRUE;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSFindInstance(String* Name = NULL)
		Author	    : Mark Tomlinson
		Desc.		: locates a COOL object, sets instancePtr to found obj.
					   (ex. "Test", given the above example)
		Returns 	: TRUE on success, otherwise false
****************************************************************************/
BOOL CCLIPSWrap::CLIPSFindInstance(String* Name, BOOL SearchImports)
{
	INITCHK(FALSE)
	if(Name==NULL)
		return FALSE;
	CLEARMBUF
	Name->copy(m_buf);
	if((instancePtr = (dl_FindInstance)(modulePtr,m_buf,SearchImports)) == NULL)
		return FALSE;
	return TRUE;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSDeleteInstance()
		Author		: Mark Tomlinson
		Desc.		: deletes current instance
		Returns 	: TRUE on success, otherwise false
****************************************************************************/
BOOL CCLIPSWrap::CLIPSDeleteInstance(void)
{
	BOOL	ret;

	INITCHK(FALSE)
	if(instancePtr == NULL)
		return FALSE;
	ret = (dl_DeleteInstance)(instancePtr);
	instancePtr = NULL;
	return ret;
}

/****************************************************************************
		Function	: CCLIPSWrap::DeleteAllInstances()
		Author		: Mark Tomlinson
		Desc.		: deletes all instances
		Returns 	: TRUE on success, otherwise false
****************************************************************************/
BOOL CCLIPSWrap::DeleteAllInstances(void)
{
	INITCHK(FALSE)
	instancePtr = NULL;
	return (dl_DeleteInstance)(NULL);
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSGetNextInstanceInClass(void)
		Author		: Mark Tomlinson
		Desc.		: Accessor for CLIPS function	GetNextInstanceInClass():
					  uses classPtr. updates instancePtr.
		Returns 	: TRUE on success, FALSE on error
****************************************************************************/
BOOL	CCLIPSWrap::CLIPSGetNextInstanceInClass(void)
{
	INITCHK(FALSE)
	if(classPtr == NULL)	{
		return FALSE;
		}
	instancePtr = (dl_GetNextInstanceInClass)(classPtr,instancePtr);
	if(instancePtr == NULL)	{
		return FALSE;
		}
	return TRUE;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSGetInstancePPForm(String* Data)
		Author		: Mark Tomlinson
		Desc.		: Accessor for CLIPS function	GetInstancePPForm():
					  uses instancePtr.
		Returns 	: TRUE on success, FALSE on error
****************************************************************************/
BOOL	CCLIPSWrap::CLIPSGetInstancePPForm(String* Data)
{
	INITCHK(FALSE)
	if(instancePtr == NULL)
		return FALSE;
	CLEARMBUF
	(dl_GetInstancePPForm)(m_buf,1023,instancePtr);
	if(strlen(m_buf) > 0)	{
		Data->assign(m_buf);
		return TRUE;
		}
	return FALSE;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSGetGlobalNumberOfInstances()
		Author		: Mark Tomlinson
		Desc.		: Accessor for CLIPS function	GetGlobalNumberOfInstances():
		Returns 	: total number of instances, all modules
****************************************************************************/
unsigned long CCLIPSWrap::CLIPSGetGlobalNumberOfInstances(void)
{
	INITCHK(FALSE)
	return (dl_GetGlobalNumberOfInstances)();
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSDirectGetSlot(String* Slot, String* Value)
		Author		: Mark Tomlinson
		Desc.		: Accessor for CLIPS function DirectGetSlot()
						(slot names are case sensitive)
		Returns 	: TRUE on success, FALSE on Error
****************************************************************************/
BOOL CCLIPSWrap::CLIPSDirectGetSlot(String *Class, String* Slot, String* Value)
{

	char		slot[256];
	struct	dataObject value;
	long		temp_l = 0;
	double	temp_f = 0.0;

	memset(slot,0,256);
	INITCHK(FALSE)
	if(Class != NULL)	{
		CLEARMBUF
		Class->copy(m_buf);
		instancePtr = (dl_FindInstance)(modulePtr,m_buf,0);
	}
	if((instancePtr == NULL)	||
	   (Slot->length()==0))
		return FALSE;
	Slot->copy(slot);
	(dl_DirectGetSlot)(instancePtr,slot,&value);
	CLEARMBUF
	switch (value.type)	{
		case INTEGER:
			temp_l = ValueToLong(GetValue(value));
			sprintf(m_buf,"%ld",temp_l);
			break;
		case FLOAT:
			temp_f = ValueToDouble(GetValue(value));
			sprintf(m_buf,"%lf",temp_f);
			break;
		case SYMBOL:
		case STRING:
		default:
			strcpy(m_buf,(char *)ValueToString(GetValue(value)));
			break;
	}
	Value->assign(m_buf);
	if (Value->length() > 0)
		return TRUE;
	return FALSE;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSDirectPutSlot(String* Slot, String* Value, int type)
		Author		: Mark Tomlinson
		Desc.		: Accessor for CLIPS function DirectPutSlot()
					  (slot names are case sensitive)
		Returns 	: TRUE on success, FALSE on Error
****************************************************************************/
BOOL CCLIPSWrap::CLIPSDirectPutSlot(String* Class, String* Slot, String* Value, int type)
{
	char		slot[256];
	struct	dataObject value;
	long		temp_l = 0;
	double	temp_f = 0.0;

	memset(slot,0,256);
	INITCHK(FALSE)
	if(Class != NULL)	{
		CLEARMBUF
		Class->copy(m_buf);
		instancePtr = (dl_FindInstance)(modulePtr,m_buf,0);
	}
		
	if((instancePtr == NULL)	||
		(Slot->length()==0))
		return FALSE;
	Slot->copy(slot);
	CLEARMBUF
	Value->copy(m_buf);
	SetType(value,type);
	switch(type)	{
	case INTEGER:
		sscanf(m_buf,"%ld",&temp_l);
		SetValue(value,(dl_AddLong)(temp_l));
		break;
	case FLOAT:
		sscanf(m_buf,"%lf",&temp_f);
		SetValue(value,(dl_AddDouble)(temp_f));
		break;
	case SYMBOL:
	case STRING:
		SetValue(value,(dl_AddSymbol)(m_buf));
	}
	return (dl_DirectPutSlot)(instancePtr,slot,&value);
}

//not implemented
#pragma argsused
BOOL CCLIPSWrap::SetSlotValue(String* Class, String* Slot, String* Value)
{
	return 0;
}

//not implemented
#pragma argsused
BOOL CCLIPSWrap::GetSlotValue(String* Class, String* Slot, String* Value)
{
	return 0;
}

/****************************************************************************
		Function	: CCLIPSWrap::CLIPSRouteCommand(String* Command)
		Author		: Mark Tomlinson
		Desc.		: Accessor for CLIPS function RouteCommand()
					  takes a fully qualified CLIPS command line and executes 
					  it, just as it you entered it in the interactive CLIPS.
		Returns 	: TRUE on success, FALSE on Error
****************************************************************************/
BOOL CCLIPSWrap::CLIPSRouteCommand(String* Command)
{
	CLEARMBUF
	Command->copy(m_buf);
	return (dl_RouteCommand)(m_buf);
}


/****************************************************************************
		Function	: CCLIPSWrap::ReadFactSlot(String* Slot, String* Data)
		Author		: Mark Tomlinson
		Desc.		: Read the data from a slot on the default fact, (factPtr)
		Returns 	: TRUE on success, FALSE on Error
****************************************************************************/
BOOL CCLIPSWrap::ReadFactSlot(String* Slot, String* Data)
{
struct dataObject *theValue;
struct dataObject question_slot;
long					temp_l = 0;
double				temp_f = 0.0;

CLEARMBUF

if (factPtr) {
	Slot->copy(m_buf);
    if ((dl_GetFactSlot)(factPtr,m_buf,&question_slot) == 1) {
		theValue = (struct dataObject *)GetValue (question_slot);
		switch (theValue->type)	{
			case INTEGER:
				temp_l = ValueToLong(theValue);
				sprintf(m_buf,"%ld",temp_l);
				break;
			case FLOAT:
				temp_f = ValueToDouble(theValue);
				sprintf(m_buf,"%lf",temp_f);
				break;
			case SYMBOL:
			case STRING:
			default:
				strcpy(m_buf,(char *)ValueToString(theValue));
				break;
			}
		Data->assign(m_buf);
		return 1;
		}
	}
return 0;
}

/****************************************************************************
		Function	: CCLIPSWrap::WriteFactSlot(String* Slot, String* Data)
		Author		: Mark Tomlinson
		Desc.		: Write a vaule to a slot on the d

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -