Подпрограмма - это обобщённое название трёх сущностей, имеющих разную семантику: 1. Процедура. Вызов процедуры - отдельный оператор, нет явного возвращаемого значения, обязательны побочные эффекты. 2. Функция. Вызывается внутри выражения, всегда явно возвращает значение, которое используется в выражении в точке вызова функции. В структурном и функциональном программировании функция не может иметь побочных эффектов. 3. Сопрограмма. Отличается от первых двух типов тем, что кроме запуска и завершения имеет ещё приостановку (с передачей управления в точку вызова и возможным возвратом значения) и возобновление с места приостановки. Посредством сопрограмм реализуются генераторы и итераторы. Потому "только подпрограммы" - это ничем не лучше, чем бредовые "только функции" в языках с Си-подобным синтаксисом.