Процедуры
. Несмотря на то, что подпрограммы C-- могут возвращать значения, для них используется термин "процедуры", а не "функции". Термин "функция" более соответствует чистым математическим функциям, т. е. соответствию y=f (x) между переменными величинами, в силу которого каждому рассматриваемому значению некоторой величины x - аргумента (или независимой переменной) соответствует определенное значение другой величины y - функции (или зависимой переменной).
Процедуры C-- имеют много общего с функциями C: аналогичный синтаксис определений, передача параметров по значениям, запрещенная вложенность процедур в процедуры ит.п. Но есть также и существенные отличия: процедурные переходы (следовательно, эффективные tail-вызовы), способность к возвращению множественных результатов, неопределенный тип результата, процедурный вызов - как оператор (не как выражение), фиксированное количество аргументов, отсутствие вложенности локальных областей и прочее.
Пример возвращения множественных результатов: все sp-процедуры примера возвращают два результата: сумму - s+n и произведение - p (n. Оператор return получает ноль или более параметров, просто как процедурный вызов; и вызов может передавать множественные результаты, как видно в рекурсивном вызове sp1. Такая способность множественных результатов довольно полезна и, к тому же, легка в реализации.