Overview

Lambdas Closures

Lambdas and Functional Patterns

Source Code

<?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(', '));
?>

Result

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
On this page