}
free(t);
}
+
+struct lambda *copy(struct lambda *t)
+{
+ struct lambda *c = malloc(sizeof (struct lambda));
+ c->which = t->which;
+ switch(t->which){
+ case lambda_ident:
+ c->data.identifier = strdup(t->data.identifier);
+ break;
+ case lambda_abs:
+ c->data.abstraction.ident = strdup(t->data.abstraction.ident);
+ c->data.abstraction.expr = copy(t->data.abstraction.expr);
+ break;
+ case lambda_app:
+ c->data.application.expr1 = copy(t->data.application.expr1);
+ c->data.application.expr2 = copy(t->data.application.expr2);
+ break;
+ }
+ return c;
+}
+