- if(lambda_ident_eq(expr, ident))
- expr->data.identifier.revision++;
- break;
- case lambda_abs:
- if(!lambda_ident_eq(expr, ident))
- lambda_alpha(expr->data.abstraction.expr, ident);
- break;
- case lambda_app:
- lambda_alpha(expr->data.application.expr1, ident);
- lambda_alpha(expr->data.application.expr2, ident);
- break;
- }
-
-}
-
-void lambda_beta(struct lambda *ident, struct lambda *body, struct lambda *target, struct lambda *total)
-{
- struct lambda *cpy;
- switch(body->which){
- case lambda_ident:
- if(lambda_ident_eq(body, ident)){
- lambda_print(total, NULL);
- printf("β -> ");
- cpy = copy(target);
- free(body->data.identifier.ident);
- if(total == body)
- *total = *cpy;
- *body = *cpy;
- free(cpy);