Например, меня интересует такой момент, как лучше описывать параметры функции, сначала выходные параметры или же сначала входные параметры?
То есть PROCEDURE A(VAR a: INTEGER; b: INTEGER); или PROCEDURE A(b: INTEGER; VAR a: INTEGER);
Второй случай мне кажется более естественным, но с другой стороны, когда выполняется присваивание a := b имеем, что "выходной" параметр как бы слева, а "входной" справа.

Также возникает вопрос, как обозначать, что параметр выходной в следующем случае, например:
TYPE PRec = POINTER TO RECORD a: INTEGER END;

(* Здесь p выглядит как входной параметр. *)
PROCEDURE Change(p: PRec);
BEGIN
p.a := 10;
END Change.