Pattern Matching в PascalABC.NET


#1

Pattern Matching - это больше прерогатива функциональных языков программирования. Опять-таки, Pattern Matching есть в Haskell.

В последнее время Pattern Matching проникает и в языки вроде C#:

Pattern Matching напоминает расширенный case по типам.

Вот пример для начала:

type
  Line = class
  end;
  Rectangle = auto class
    X,Y,Width,Height: real;
  end;
  Circle = auto class
    X,Y,Radius: real;
  end;
  
begin
  var l := new List<Object>;
  l.Add(new Line);
  l.Add(new Circle(10,10,5));
  l.Add(new Rectangle(10,10,20,10));
  foreach var x in l do
    match x with
  Line(var ll): Println('Line S =',0);
  Circle(var c): Println('Circle S =',c.Radius*c.Radius*Pi);
  Rectangle(var r): Println('Rectangle S =',r.Width*r.Height);
    end;
end.  

Здесь в полиморфном списке вычисляются площади фигур. Переменная x в зависимости от динамического типа деконструируется в переменную соответствующего типа (Line, Circle или Rectangle). И затем находится площадь.


#2

Однако, вкусняшка!