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

📄 prdctfun.c

📁 NASA 开发使用的一个专家系统
💻 C
📖 第 1 页 / 共 2 页
字号:
      if (rv1.type == INTEGER)        {         if (rv2.type == INTEGER)           {            if (ValueToLong(rv1.value) > ValueToLong(rv2.value))              { return(CLIPS_FALSE); }           }         else           {            if ((double) ValueToLong(rv1.value) > ValueToDouble(rv2.value))              { return(CLIPS_FALSE); }           }        }      else        {         if (rv2.type == INTEGER)           {            if (ValueToDouble(rv1.value) > (double) ValueToLong(rv2.value))              { return(CLIPS_FALSE); }           }         else           {            if (ValueToDouble(rv1.value) > ValueToDouble(rv2.value))              { return(CLIPS_FALSE); }           }        }      rv1.type = rv2.type;      rv1.value = rv2.value;     }   /*======================================*/   /* Each argument was less than or equal */   /* to it predecessor. Return TRUE.      */   /*======================================*/      return(CLIPS_TRUE);  }/********************************************//* GreaterThanOrEqualFunction: CLIPS access *//*   routine for the >= function.           *//********************************************/globle BOOLEAN GreaterThanOrEqualFunction()  {   EXPRESSION *theArgument;   DATA_OBJECT rv1, rv2;   int pos = 1;   /*=========================*/   /* Get the first argument. */   /*=========================*/      theArgument = GetFirstArgument();   if (theArgument == NULL) { return(CLIPS_TRUE); }   if (! GetNumericArgument(theArgument,">=",&rv1,CLIPS_FALSE,pos)) return(CLIPS_FALSE);   pos++;      /*===================================================*/   /* Compare each of the subsequent arguments to its   */   /* predecessor. If any is lesser, then return FALSE. */   /*===================================================*/      for (theArgument = GetNextArgument(theArgument);        theArgument != NULL;        theArgument = GetNextArgument(theArgument), pos++)     {      if (! GetNumericArgument(theArgument,">=",&rv2,CLIPS_FALSE,pos)) return(CLIPS_FALSE);      if (rv1.type == INTEGER)        {         if (rv2.type == INTEGER)           {            if (ValueToLong(rv1.value) < ValueToLong(rv2.value))              { return(CLIPS_FALSE); }           }         else           {            if ((double) ValueToLong(rv1.value) < ValueToDouble(rv2.value))              { return(CLIPS_FALSE); }           }        }      else        {         if (rv2.type == INTEGER)           {            if (ValueToDouble(rv1.value) < (double) ValueToLong(rv2.value))              { return(CLIPS_FALSE); }           }         else           {            if (ValueToDouble(rv1.value) < ValueToDouble(rv2.value))              { return(CLIPS_FALSE); }           }        }      rv1.type = rv2.type;      rv1.value = rv2.value;     }   /*=========================================*/   /* Each argument was greater than or equal */   /* to its predecessor. Return TRUE.        */   /*=========================================*/      return(CLIPS_TRUE);  }/**********************************//* LessThanFunction: CLIPS access *//*   routine for the < function.  *//**********************************/globle BOOLEAN LessThanFunction()  {   EXPRESSION *theArgument;   DATA_OBJECT rv1, rv2;   int pos = 1;   /*=========================*/   /* Get the first argument. */   /*=========================*/      theArgument = GetFirstArgument();   if (theArgument == NULL) { return(CLIPS_TRUE); }   if (! GetNumericArgument(theArgument,"<",&rv1,CLIPS_FALSE,pos)) return(CLIPS_FALSE);   pos++;   /*==========================================*/   /* Compare each of the subsequent arguments */   /* to its predecessor. If any is greater or */   /* equal, then return FALSE.                */   /*==========================================*/   for (theArgument = GetNextArgument(theArgument);        theArgument != NULL;        theArgument = GetNextArgument(theArgument), pos++)     {      if (! GetNumericArgument(theArgument,"<",&rv2,CLIPS_FALSE,pos)) return(CLIPS_FALSE);      if (rv1.type == INTEGER)        {         if (rv2.type == INTEGER)           {            if (ValueToLong(rv1.value) >= ValueToLong(rv2.value))              { return(CLIPS_FALSE); }           }         else           {            if ((double) ValueToLong(rv1.value) >= ValueToDouble(rv2.value))              { return(CLIPS_FALSE); }           }        }      else        {         if (rv2.type == INTEGER)           {            if (ValueToDouble(rv1.value) >= (double) ValueToLong(rv2.value))              { return(CLIPS_FALSE); }           }         else           {            if (ValueToDouble(rv1.value) >= ValueToDouble(rv2.value))              { return(CLIPS_FALSE); }           }        }      rv1.type = rv2.type;      rv1.value = rv2.value;     }   /*=================================*/   /* Each argument was less than its */   /* predecessor. Return TRUE.       */   /*=================================*/      return(CLIPS_TRUE);  }/*************************************//* GreaterThanFunction: CLIPS access *//*   routine for the > function.     *//*************************************/globle BOOLEAN GreaterThanFunction()  {   EXPRESSION *theArgument;   DATA_OBJECT rv1, rv2;   int pos = 1;   /*=========================*/   /* Get the first argument. */   /*=========================*/      theArgument = GetFirstArgument();   if (theArgument == NULL) { return(CLIPS_TRUE); }   if (! GetNumericArgument(theArgument,">",&rv1,CLIPS_FALSE,pos)) return(CLIPS_FALSE);   pos++;   /*==========================================*/   /* Compare each of the subsequent arguments */   /* to its predecessor. If any is lesser or  */   /* equal, then return FALSE.                */   /*==========================================*/      for (theArgument = GetNextArgument(theArgument);        theArgument != NULL;        theArgument = GetNextArgument(theArgument), pos++)     {      if (! GetNumericArgument(theArgument,">",&rv2,CLIPS_FALSE,pos)) return(CLIPS_FALSE);      if (rv1.type == INTEGER)        {         if (rv2.type == INTEGER)           {            if (ValueToLong(rv1.value) <= ValueToLong(rv2.value))              { return(CLIPS_FALSE); }           }         else           {            if ((double) ValueToLong(rv1.value) <= ValueToDouble(rv2.value))              { return(CLIPS_FALSE); }           }        }      else        {         if (rv2.type == INTEGER)           {            if (ValueToDouble(rv1.value) <= (double) ValueToLong(rv2.value))              { return(CLIPS_FALSE); }           }         else           {            if (ValueToDouble(rv1.value) <= ValueToDouble(rv2.value))              { return(CLIPS_FALSE); }           }        }      rv1.type = rv2.type;      rv1.value = rv2.value;     }   /*================================*/   /* Each argument was greater than */   /* its predecessor. Return TRUE.  */   /*================================*/      return(CLIPS_TRUE);  }/**************************************//* NumericEqualFunction: CLIPS access *//*   routine for the = function.      *//**************************************/globle BOOLEAN NumericEqualFunction()  {   EXPRESSION *theArgument;   DATA_OBJECT rv1, rv2;   int pos = 1;   /*=========================*/   /* Get the first argument. */   /*=========================*/      theArgument = GetFirstArgument();   if (theArgument == NULL) { return(CLIPS_TRUE); }   if (! GetNumericArgument(theArgument,"=",&rv1,CLIPS_FALSE,pos)) return(CLIPS_FALSE);   pos++;      /*=================================================*/   /* Compare each of the subsequent arguments to the */   /* first. If any is unequal, then return FALSE.    */   /*=================================================*/      for (theArgument = GetNextArgument(theArgument);        theArgument != NULL;        theArgument = GetNextArgument(theArgument), pos++)     {      if (! GetNumericArgument(theArgument,"=",&rv2,CLIPS_FALSE,pos)) return(CLIPS_FALSE);      if (rv1.type == INTEGER)        {         if (rv2.type == INTEGER)           {            if (ValueToLong(rv1.value) != ValueToLong(rv2.value))              { return(CLIPS_FALSE); }           }         else           {            if ((double) ValueToLong(rv1.value) != ValueToDouble(rv2.value))              { return(CLIPS_FALSE); }           }        }      else        {         if (rv2.type == INTEGER)           {            if (ValueToDouble(rv1.value) != (double) ValueToLong(rv2.value))              { return(CLIPS_FALSE); }           }         else           {            if (ValueToDouble(rv1.value) != ValueToDouble(rv2.value))              { return(CLIPS_FALSE); }           }        }     }   /*=================================*/   /* All arguments were equal to the */   /* first argument. Return TRUE.    */   /*=================================*/      return(CLIPS_TRUE);  }/*****************************************//* NumericNotEqualFunction: CLIPS access *//*   routine for the <> function.        *//*****************************************/globle BOOLEAN NumericNotEqualFunction()  {   EXPRESSION *theArgument;   DATA_OBJECT rv1, rv2;   int pos = 1;   /*=========================*/   /* Get the first argument. */   /*=========================*/      theArgument = GetFirstArgument();   if (theArgument == NULL) { return(CLIPS_TRUE); }   if (! GetNumericArgument(theArgument,"<>",&rv1,CLIPS_FALSE,pos)) return(CLIPS_FALSE);   pos++;   /*=================================================*/   /* Compare each of the subsequent arguments to the */   /* first. If any is equal, then return FALSE.      */   /*=================================================*/      for (theArgument = GetNextArgument(theArgument);        theArgument != NULL;        theArgument = GetNextArgument(theArgument), pos++)     {      if (! GetNumericArgument(theArgument,"<>",&rv2,CLIPS_FALSE,pos)) return(CLIPS_FALSE);      if (rv1.type == INTEGER)        {         if (rv2.type == INTEGER)           {            if (ValueToLong(rv1.value) == ValueToLong(rv2.value))              { return(CLIPS_FALSE); }           }         else           {            if ((double) ValueToLong(rv1.value) == ValueToDouble(rv2.value))              { return(CLIPS_FALSE); }           }        }      else        {         if (rv2.type == INTEGER)           {            if (ValueToDouble(rv1.value) == (double) ValueToLong(rv2.value))              { return(CLIPS_FALSE); }           }         else           {            if (ValueToDouble(rv1.value) == ValueToDouble(rv2.value))              { return(CLIPS_FALSE); }           }        }     }   /*===================================*/   /* All arguments were unequal to the */   /* first argument. Return TRUE.      */   /*===================================*/      return(CLIPS_TRUE);  }/**************************************//* OddpFunction: CLIPS access routine *//*   for the oddp function.           *//**************************************/globle BOOLEAN OddpFunction()  {   DATA_OBJECT item;   long num, halfnum;   if (ArgCountCheck("oddp",EXACTLY,1) == -1) return(CLIPS_FALSE);   if (ArgTypeCheck("oddp",1,INTEGER,&item) == CLIPS_FALSE) return(CLIPS_FALSE);   num = DOToLong(item);   halfnum = (num / 2) * 2;   if (num == halfnum) return(CLIPS_FALSE);   return(CLIPS_TRUE);  }/***************************************//* EvenpFunction: CLIPS access routine *//*   for the evenp function.           *//***************************************/globle BOOLEAN EvenpFunction()  {   DATA_OBJECT item;   long num, halfnum;   if (ArgCountCheck("evenp",EXACTLY,1) == -1) return(CLIPS_FALSE);   if (ArgTypeCheck("evenp",1,INTEGER,&item) == CLIPS_FALSE) return(CLIPS_FALSE);   num = DOToLong(item);   halfnum = (num / 2) * 2;   if (num != halfnum) return(CLIPS_FALSE);   return(CLIPS_TRUE);  }

⌨️ 快捷键说明

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