📄 prdctfun.c
字号:
/* predecessor. If any is greater, then return FALSE. */
/*====================================================*/
for (theArgument = GetNextArgument(theArgument);
theArgument != NULL;
theArgument = GetNextArgument(theArgument), pos++)
{
if (! GetNumericArgument(theEnv,theArgument,"<=",&rv2,FALSE,pos)) return(FALSE);
if (rv1.type == INTEGER)
{
if (rv2.type == INTEGER)
{
if (ValueToLong(rv1.value) > ValueToLong(rv2.value))
{ return(FALSE); }
}
else
{
if ((double) ValueToLong(rv1.value) > ValueToDouble(rv2.value))
{ return(FALSE); }
}
}
else
{
if (rv2.type == INTEGER)
{
if (ValueToDouble(rv1.value) > (double) ValueToLong(rv2.value))
{ return(FALSE); }
}
else
{
if (ValueToDouble(rv1.value) > ValueToDouble(rv2.value))
{ return(FALSE); }
}
}
rv1.type = rv2.type;
rv1.value = rv2.value;
}
/*======================================*/
/* Each argument was less than or equal */
/* to it predecessor. Return TRUE. */
/*======================================*/
return(TRUE);
}
/********************************************/
/* GreaterThanOrEqualFunction: H/L access */
/* routine for the >= function. */
/********************************************/
globle intBool GreaterThanOrEqualFunction(
void *theEnv)
{
EXPRESSION *theArgument;
DATA_OBJECT rv1, rv2;
int pos = 1;
/*=========================*/
/* Get the first argument. */
/*=========================*/
theArgument = GetFirstArgument();
if (theArgument == NULL) { return(TRUE); }
if (! GetNumericArgument(theEnv,theArgument,">=",&rv1,FALSE,pos)) return(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(theEnv,theArgument,">=",&rv2,FALSE,pos)) return(FALSE);
if (rv1.type == INTEGER)
{
if (rv2.type == INTEGER)
{
if (ValueToLong(rv1.value) < ValueToLong(rv2.value))
{ return(FALSE); }
}
else
{
if ((double) ValueToLong(rv1.value) < ValueToDouble(rv2.value))
{ return(FALSE); }
}
}
else
{
if (rv2.type == INTEGER)
{
if (ValueToDouble(rv1.value) < (double) ValueToLong(rv2.value))
{ return(FALSE); }
}
else
{
if (ValueToDouble(rv1.value) < ValueToDouble(rv2.value))
{ return(FALSE); }
}
}
rv1.type = rv2.type;
rv1.value = rv2.value;
}
/*=========================================*/
/* Each argument was greater than or equal */
/* to its predecessor. Return TRUE. */
/*=========================================*/
return(TRUE);
}
/**********************************/
/* LessThanFunction: H/L access */
/* routine for the < function. */
/**********************************/
globle intBool LessThanFunction(
void *theEnv)
{
EXPRESSION *theArgument;
DATA_OBJECT rv1, rv2;
int pos = 1;
/*=========================*/
/* Get the first argument. */
/*=========================*/
theArgument = GetFirstArgument();
if (theArgument == NULL) { return(TRUE); }
if (! GetNumericArgument(theEnv,theArgument,"<",&rv1,FALSE,pos)) return(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(theEnv,theArgument,"<",&rv2,FALSE,pos)) return(FALSE);
if (rv1.type == INTEGER)
{
if (rv2.type == INTEGER)
{
if (ValueToLong(rv1.value) >= ValueToLong(rv2.value))
{ return(FALSE); }
}
else
{
if ((double) ValueToLong(rv1.value) >= ValueToDouble(rv2.value))
{ return(FALSE); }
}
}
else
{
if (rv2.type == INTEGER)
{
if (ValueToDouble(rv1.value) >= (double) ValueToLong(rv2.value))
{ return(FALSE); }
}
else
{
if (ValueToDouble(rv1.value) >= ValueToDouble(rv2.value))
{ return(FALSE); }
}
}
rv1.type = rv2.type;
rv1.value = rv2.value;
}
/*=================================*/
/* Each argument was less than its */
/* predecessor. Return TRUE. */
/*=================================*/
return(TRUE);
}
/*************************************/
/* GreaterThanFunction: H/L access */
/* routine for the > function. */
/*************************************/
globle intBool GreaterThanFunction(
void *theEnv)
{
EXPRESSION *theArgument;
DATA_OBJECT rv1, rv2;
int pos = 1;
/*=========================*/
/* Get the first argument. */
/*=========================*/
theArgument = GetFirstArgument();
if (theArgument == NULL) { return(TRUE); }
if (! GetNumericArgument(theEnv,theArgument,">",&rv1,FALSE,pos)) return(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(theEnv,theArgument,">",&rv2,FALSE,pos)) return(FALSE);
if (rv1.type == INTEGER)
{
if (rv2.type == INTEGER)
{
if (ValueToLong(rv1.value) <= ValueToLong(rv2.value))
{ return(FALSE); }
}
else
{
if ((double) ValueToLong(rv1.value) <= ValueToDouble(rv2.value))
{ return(FALSE); }
}
}
else
{
if (rv2.type == INTEGER)
{
if (ValueToDouble(rv1.value) <= (double) ValueToLong(rv2.value))
{ return(FALSE); }
}
else
{
if (ValueToDouble(rv1.value) <= ValueToDouble(rv2.value))
{ return(FALSE); }
}
}
rv1.type = rv2.type;
rv1.value = rv2.value;
}
/*================================*/
/* Each argument was greater than */
/* its predecessor. Return TRUE. */
/*================================*/
return(TRUE);
}
/**************************************/
/* NumericEqualFunction: H/L access */
/* routine for the = function. */
/**************************************/
globle intBool NumericEqualFunction(
void *theEnv)
{
EXPRESSION *theArgument;
DATA_OBJECT rv1, rv2;
int pos = 1;
/*=========================*/
/* Get the first argument. */
/*=========================*/
theArgument = GetFirstArgument();
if (theArgument == NULL) { return(TRUE); }
if (! GetNumericArgument(theEnv,theArgument,"=",&rv1,FALSE,pos)) return(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(theEnv,theArgument,"=",&rv2,FALSE,pos)) return(FALSE);
if (rv1.type == INTEGER)
{
if (rv2.type == INTEGER)
{
if (ValueToLong(rv1.value) != ValueToLong(rv2.value))
{ return(FALSE); }
}
else
{
if ((double) ValueToLong(rv1.value) != ValueToDouble(rv2.value))
{ return(FALSE); }
}
}
else
{
if (rv2.type == INTEGER)
{
if (ValueToDouble(rv1.value) != (double) ValueToLong(rv2.value))
{ return(FALSE); }
}
else
{
if (ValueToDouble(rv1.value) != ValueToDouble(rv2.value))
{ return(FALSE); }
}
}
}
/*=================================*/
/* All arguments were equal to the */
/* first argument. Return TRUE. */
/*=================================*/
return(TRUE);
}
/*****************************************/
/* NumericNotEqualFunction: H/L access */
/* routine for the <> function. */
/*****************************************/
globle intBool NumericNotEqualFunction(
void *theEnv)
{
EXPRESSION *theArgument;
DATA_OBJECT rv1, rv2;
int pos = 1;
/*=========================*/
/* Get the first argument. */
/*=========================*/
theArgument = GetFirstArgument();
if (theArgument == NULL) { return(TRUE); }
if (! GetNumericArgument(theEnv,theArgument,"<>",&rv1,FALSE,pos)) return(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(theEnv,theArgument,"<>",&rv2,FALSE,pos)) return(FALSE);
if (rv1.type == INTEGER)
{
if (rv2.type == INTEGER)
{
if (ValueToLong(rv1.value) == ValueToLong(rv2.value))
{ return(FALSE); }
}
else
{
if ((double) ValueToLong(rv1.value) == ValueToDouble(rv2.value))
{ return(FALSE); }
}
}
else
{
if (rv2.type == INTEGER)
{
if (ValueToDouble(rv1.value) == (double) ValueToLong(rv2.value))
{ return(FALSE); }
}
else
{
if (ValueToDouble(rv1.value) == ValueToDouble(rv2.value))
{ return(FALSE); }
}
}
}
/*===================================*/
/* All arguments were unequal to the */
/* first argument. Return TRUE. */
/*===================================*/
return(TRUE);
}
/**************************************/
/* OddpFunction: H/L access routine */
/* for the oddp function. */
/**************************************/
globle intBool OddpFunction(
void *theEnv)
{
DATA_OBJECT item;
long num, halfnum;
if (EnvArgCountCheck(theEnv,"oddp",EXACTLY,1) == -1) return(FALSE);
if (EnvArgTypeCheck(theEnv,"oddp",1,INTEGER,&item) == FALSE) return(FALSE);
num = DOToLong(item);
halfnum = (num / 2) * 2;
if (num == halfnum) return(FALSE);
return(TRUE);
}
/***************************************/
/* EvenpFunction: H/L access routine */
/* for the evenp function. */
/***************************************/
globle intBool EvenpFunction(
void *theEnv)
{
DATA_OBJECT item;
long num, halfnum;
if (EnvArgCountCheck(theEnv,"evenp",EXACTLY,1) == -1) return(FALSE);
if (EnvArgTypeCheck(theEnv,"evenp",1,INTEGER,&item) == FALSE) return(FALSE);
num = DOToLong(item);
halfnum = (num / 2) * 2;
if (num != halfnum) return(FALSE);
return(TRUE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -