This repository has been archived on 2024-12-25. You can view files and clone it, but cannot push or open issues or pull requests.
2023-06-20 21:52:24 +03:00

38 lines
737 B
ObjectPascal

type
Expr = class
end;
Cons = auto class(Expr)
r: real;
end;
Add = auto class(Expr)
left,right: Expr;
procedure Deconstruct(var l,r: Expr);
begin
l := left; r := right;
end;
end;
Mult = auto class(Expr)
left,right: Expr;
procedure Deconstruct(var l,r: Expr);
begin
l := left; r := right;
end;
end;
Neg = auto class(Expr)
ex: Expr;
end;
function Eval(e: Expr): real;
begin
match e with
Cons(c): Result := c.r;
Neg(n): Result := -Eval(n.Ex);
Add(l,r): Result := Eval(l) + Eval(r);
Mult(l,r): Result := Eval(l) * Eval(r);
end;
end;
begin
var r := new Add(new Neg(new Cons(2)),new Mult(new Cons(3),new Cons(4)));
Eval(r).Print;
end.