📄 prdctfun.c
字号:
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 + -