Вот кусок ArithmSimplify.pas - стандартного примера для match:
type
Expr = interface
end;
V = auto class(Expr)
name: string;
end;
Cons = auto class(Expr)
r: real;
end;
Add = auto class(Expr)
left,right: Expr;
end;
Mult = auto class(Expr)
left,right: Expr;
end;
Neg = auto class(Expr)
ex: Expr;
end;
function NegC(ex: Expr) := new Neg(ex);
function ConsC(r: real) := new Cons(r);
function AddC(ex1,ex2: Expr) := new Add(ex1,ex2);
function MultC(ex1,ex2: Expr) := new Mult(ex1,ex2);
function VC(name: string) := new V(name);
В auto classах еще и деконструкторы автоматически генерируются. Мы хотели еще и производящие функции, которые Вы видите, но к сожалению в отличие от Scala у нас нельзя чтобы функция имела то же имя, что и класс