(# rec)(# l0)(# c0)(# r0)(# set) (rec![l0,c0,r0] | *rec?[l,c,r](# ll)(# cc)(# rr)(#make) (rec![ll,cc,rr] | c![] | make![] *make?[](ll![l,c,r] | make![]) | *make?[](r![ll,cc,rr] | make![]) | *make?[](set![l,c,r] | make![])) | *set?[la,ca,ra]ra?[lb,cb,rb]lb?[lc,cc,rc]ca?[]cc?[])