Процедуры не возвращают результат, функции — возвращают.
$X (eXtended syntax)Эта разница осложняется тем, что Паскаль после Вирта чаще портят, чем делают лучше. И, например, сделали возможным выбрасывать результат функции и вызывать функцию как процедуру. В Delphi это регулируется директивой $X (eXtended syntax), который паровозом меняет сразу много всего, и нельзя по отдельности только запретить выбрасывать результат. Паровозом становится нельзя образаться к результату по имени переменной Result. Казалось бы, можно пользоваться Exit(значение), но компилятор начинает глючить, когда тип значения record с управлением владением. И буфер символов array[0 .. 1023] of Char становится сложнее превратить в строку. Также становится обязательно использовать каретку для разыменования указателей. Смешались в кучу кони, люди. Куча синтаксических отличий переключается одной директивой, и сделано так, что с выключенной директивой толком жить не получается. Может быть, в FPC иначе, там свои глюки.
Что касается операторов, в русском языке есть путаница переводов слов, которые в английском языке сильно не похожи. Хорошие переводчики разрешили эту путаницу таким образом, что statement = оператоР, а operator = операЦИЯ. Но не все переводчики согласовали глоссарий.
Оператор (statement) — это:
- пустой оператор
- присваивание
- вызов процедуры
- составной оператор begin оператор; оператор; … end;
- прочие операторы, как goto, raise, try, if, for, while, repeat
Операция (operator) — это:
- сложение, вычитание, умножение, деление
- сравнения
- логические и побитовые операции and, xor, or, not
- битовые сдвиги shl, shr
- явные и неявные приведения типов
В Delphi 2006 и выше для объявления собственных операторов используется синтаксис class operator. У Free Pascal тоже был свой синтаксис собственных операторов.
Здесь может быть путаница, потому что в Pascal не все операторы являются честными операторами, как должно быть. Например, Exit, Break и Continue не являются синтаксически простыми операторами, а являются операторами-вызовами процедуры, и расположены эти специальные процедуры в модуле System, так что полное имя System.Exit тоже сработает.
Автор учебника, наверное, думает, что Read и ReadLn, наоборот, являются простыми операторами. Но нет. Это процедуры из модуля System, на которые навешана магия компилятора, чтоб они принимали разные параметры, но эта магия не делает из них операторы. Хотя вызов процедуры — это формально оператор.