}
}
-void lambda_reduce(struct lambda *t, struct lambda *total, int *maxdepth)
+void lambda_reduce(struct lambda **t, struct lambda **total, int *maxdepth)
{
if(*maxdepth == 0)
return;
struct lambda *t1, *t2;
- if(t->which == lambda_app){
- t1 = t->data.application.expr1;
- t2 = t->data.application.expr2;
- lambda_reduce(t1, total, maxdepth);
+ if((*t)->which == lambda_app){
+ t1 = (*t)->data.application.expr1;
+ t2 = (*t)->data.application.expr2;
+ lambda_reduce(&t1, total, maxdepth);
if(t1->which == lambda_abs){
if(t1->data.abstraction.strict)
- lambda_reduce(t2, total, maxdepth);
- lambda_print(total, t);
+ lambda_reduce(&t2, total, maxdepth);
+ lambda_print(*total, *t);
printf("β -> ");
- lambda_beta(t1, t1->data.abstraction.expr, t2, total);
+ lambda_beta(t1, t1->data.abstraction.expr, t2, *total);
lambda_free(t2);
t2 = copy(t1->data.abstraction.expr);
if(total == t)
- *total = *t2;
+ **total = *t2;
lambda_free(t1);
- *t = *t2;
+ **t = *t2;
free(t2);
(*maxdepth)--;
lambda_reduce(t, total, maxdepth);