Синтаксис лямбда-выражений

Лямбда-выражение имеет следующий синтаксис:

секция_параметров секция_типа -> выражение

или

секция_параметров секция_типа -> составной оператор

или

function секция_параметров секция_типа -> выражение

или

procedure секция_параметров -> составной оператор

Секция типа - либо пуста, либо имеет вид:

: тип

Секция параметров устроена следующим образом:

идентификатор

или

( список идентификаторов )

Список идентификаторов состоит из секций. Каждая секция содержит идентификаторы, перечисляемые через запятую, после которых может следовать : тип. Секции отделяются одна от другой символом "точка с запятой". Список идентификаторов не может состоять из одного идентификатора без указания типа.

В инициализаторах процедурных переменных вида

var имя: тип := лямбда-выражение

если лямбда-выражение не начинается с ключевого слова function или procedure, то в секции параметров допустимы только переменные без указания типа, перечисляемые через запятую; секция типа также должна быть пустой

Например:

x -> x+1
() -> 1
(x,y) -> x*y
(x,y: integer) -> x*y
(x,y: integer): integer -> x*y
(x: integer; y: integer) -> x*y
(x,y: integer) -> begin Result := x*y end
(x,y: integer) -> begin Result := x*y end
function -> 1
function
(x,y) -> x*y
function (x,y: integer) -> x*y
function (x,y: integer): integer -> x*y
function (x,y: integer): integer -> begin Result := x*y end
procedure
-> begin write(1); write(2) end
procedure (x: integer; s: string)-> begin write(x,s) end