Поправљен баг у "примени" процедури
This commit is contained in:
parent
fa931c0d33
commit
cbb8417c9d
22
internals.c
22
internals.c
|
@ -784,11 +784,25 @@ object applyInt(object parameters, env currentEnv)
|
||||||
CAR(expression) = copyObject(CAR(parameters));
|
CAR(expression) = copyObject(CAR(parameters));
|
||||||
CDR(expression) = copyObject(CAR(CDR(parameters)));
|
CDR(expression) = copyObject(CAR(CDR(parameters)));
|
||||||
|
|
||||||
object *current = &expression;
|
/* први аргумент се евалуира да би "примени" могао познати да ли се
|
||||||
while (TYPE(*current) != nilObject)
|
* заиста ради о функцији, и да ли је она нормална или специјална
|
||||||
|
* (јер ако је специјална "навођење" аргумената ремети извршавање) */
|
||||||
|
CAR(expression) = Eval(CAR(expression), currentEnv);
|
||||||
|
|
||||||
|
if (TYPE(CAR(expression)) != procedureObject)
|
||||||
{
|
{
|
||||||
CAR(*current) = quoteExpression(CAR(*current));
|
deleteObject(expression);
|
||||||
current = &CDR(*current);
|
SIGERR(notApplicableError);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!PROC_SPECIAL(CAR(expression)))
|
||||||
|
{
|
||||||
|
object *current = &expression;
|
||||||
|
while (TYPE(*current) != nilObject)
|
||||||
|
{
|
||||||
|
CAR(*current) = quoteExpression(CAR(*current));
|
||||||
|
current = &CDR(*current);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Eval(expression, currentEnv);
|
return Eval(expression, currentEnv);
|
||||||
|
|
Loading…
Reference in a new issue