Lambdas and Functional Patterns
<?pas
// Lambdas and Functional Patterns
// Basic lambda syntax (Arrow syntax)
var square := lambda(x: Integer): Integer => x * x;
PrintLn('Square of 5: ' + square(5).ToString);
// Explicitly typed dynamic array
var names : array of String := ['Charlie', 'Alice', 'Bob'];
// Lambda as callback for sorting (in-place)
names.Sort(lambda(a, b: String): Integer => CompareText(a, b));
PrintLn('Sorted: ' + names.Join(', '));
// Filtering an array (returns a new array)
var numbers : array of Integer := [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var evens := numbers.Filter(lambda(x: Integer) => (x mod 2) = 0);
PrintLn('Evens: ' + evens.Map(IntToStr).Join(', '));
// Mapping an array (transformation)
var squaredNames := names.Map(
lambda(s: String) => s.ToUpper + ' (' + s.Length.ToString + ')'
);
PrintLn('Mapped names: ' + squaredNames.Join(', '));
// Stateless lambda shorthand
var items : array of Integer := [1, 2, 3];
var doubled := items.Map(lambda(x) => x * 2);
PrintLn('Doubled: ' + doubled.Map(IntToStr).Join(', '));
?>
Square of 5: 25 Sorted: Alice, Bob, Charlie Evens: 2, 4, 6, 8, 10 Mapped names: ALICE (5), BOB (3), CHARLIE (7) Doubled: 2, 4, 6