Да сколько ж можно! Интерфейс определяется не конкретным экземпляром процедуры, а компилятором. Скажем, один компилятор предпочитает передавать параметры через регистры, другой через стек. Будет ли этот интерфейс использоваться в данной конкретной процедуре не важно, главное что он есть и может быть использован. Вот для подпрограммы такого интерфейса просто нет, поэтому для передачи туда значений приходится каждый раз писать его заново.формально отличие процедуры от подпрограммы заключается в том, что она МОЖЕТ иметь интерфейс обмена данными, но не обязана. простейший пример из паскаля: procedure init; - нет ни входных, ни выходных параметров
Например, новая научная теория будет включать в себя старую как частный случай, верный для определенных условий. Есть ньютоновская механика, потом придумали релятивистскую. Она включает ньютоновскую как частный случай малых скоростей. Не надо путать с биологической эволюцией, где последующий вид оказывается более специфичным, чем предыдущий.каким надмножеством?! классификация всегда рассматривается от начала к концу, и никакой рекурсии или возврата к вышестоящему уровню не допускает! процедура вышла из подпрограммы - все, точка. обобщающий термин породил частный случай. какие могут быть иные подходы?!
Приведите хоть один пример языка, в котором не определен интерфейс передачи параметров в функцию. Любая функция обладает интерфейсами передачи данных внутрь и наружу, они в компиляторе прописаны, но может ими не пользоваться.нет, опять передергивание! функция обязана иметь только один интерфейс вывода результата своей работы! только один! именно наличие этого неотъемлемого свойства и отличает ее от всех прочих членов множества подпрограмм! это ведь очевидно! представить себе функцию без параметров легко, представить себе функцию без результата - невозможно (это будет процедура).
Опять путаете с биологической эволюцией?изначально функция родилась из ранее существовавших подпрограмм, и никакого иного отношения между этими категориями быть не может!
Изначально человеком были придуманы натуральные числа, потом это множество расширили до целых чисел, потом до дробных и так далее. Зачем вы утверждаете что раз все числа произошли от натуральных, они ими и являются?если бы это было наиболее общим типом, то оно исторически появилось бы раньше и в процессе эволюции породило бы появление других, более простых наследников - согласно вашей логике. но вся теория развития возражает вам! именно в процессе развития появляются более сложные, более гибкие и обладающие большими возможностями типы [функций], но не наоборот, из сложного путем деградации рождаются примитивные!
Пока что вы показали противоречия в своих рассуждениях. Жду противоречий в моих. Только, пожалуйста, постарайтесь на этот раз использовать логику.достаточно ли я указал вам на противоречия в ваших суждениях?
И вот это называется логикой? По-вашему, любой цыпленок является курицей? И, между прочим, как раз с термином "родить" это ваши высказывания. Если от подпрограммы (курицы) произошла (рождена) процедура (петух) то подпрограмма заменит процедуру.цыпленок - частный случай курицы. однако цыплята бывают петушки и курочки - и они оба суть курица. вы меня втягиваете в спор о глупостях вроде "если курица способна родить петуха, можно ли считать, что она заменит его? "
Уже из этого куска видна бесполезность смешивания математической и алгоритмической функций. В математике это однозначное соответствие результата аргументам, а в программировании - последовательный алгоритм, который может использовать не только аргументы и не только выдавать результат.обратимся к матери всех наук - математике. математическая функция и по записи и по действию суть аналог рассматриваемой нами проблемы. грубо говоря, в математике функция - это подстановка некоего числа, аналитически получающегося абсолютно однозначно из некоего множества других чисел. итак, признаки функции:
Алгоритм это последовательность операций, а математическая функция - однозначное соответствие, в лучшем случае - одна операция. Видите разницу?сама по себе функция благодаря третьему своему отличительному признаку тоже является алгоритмом!
Не путайте "невозможно" и "невозможно в настоящий момент". Записать формулу движения возможно, но сейчас не известно методов ее аналитически решить. Не говоря о том, что функция это не алгоритм, хотя для ее расчета алгоритм и может использоваться.задача движения трех тел в поле тяготения, если мне не изменяет память, это предельная задача, решаемая аналитически, т.е. по формуле. уже для 4-х тел не существует этого решения, чего уж говорить о пяти и более! но алгоритмы решения этих задач существуют!!! т.е. последовательность действий известна, а готовой функции не существует.
Оставьте уже Си в покое. Мы сейчас обсуждаем именно абстрактные подпрограммы, процедуры и функции. Тем более, раз в Си из всего этого есть только последние, он плохо подходит для примера.история развития языка Си - это история противоречий
Я смотрю, вы весьма плохо знакомы с физикой и физическими моделями. "абсолютно твердое тело", "абсолютно упругое столкновение", "сферический конь в вакууме" даже обычные числа - это всего лишь абстракции, придуманные для упрощения (более того, хоть какой-то возможности) расчетов. И как раз для абстрактных расчетов компьютер приспособлен идеально - он не оперирует физическими объектами, только их моделями. Впрочем, это не относится к вашему любимому void, как впрочем и он к теме разговора.но, как все-таки ясно теперь, полного отсутствия чего бы то ни было вообще не существует!
Почти правильно, только вот это как раз не исключение, а правило: язык (а точнее, компилятор) обязан предоставить для функции стандартизованные интерфейсы ввода и вывода. Они могут использоваться, а могут и нет. И мои утверждения все также остаются верными в условиях нормальной логики: если мне захочется воспользоваться основным назначением функции, результат вполне можно проигнорировать. Часто вы смотрите возвращаемое значение у printf()? Или код возврата программы?кстати, функция всегда сможет заменить процедуру только если мы примем априори, что результат функции МОЖНО ИГНОРИРОВАТЬ. т.е. снова согласимся с исключением из правил, опровергающим основное назначение функции - устанавливать связь одного выходного числа с множеством других, входных. т.е. все ваши утверждения будут верны только в условиях искаженной логики: если основным желаемым эффектом функции "построить дом" для вас будет расходование кирпича и цемента, то разумеется, не надо переживать о том, что готовый дом можно просто стереть в порошок за ненадобностью.
Ну, радует, что хотя бы согласились с тем, что функция всегда может заменить процедуру, но не наоборот. Хотя почему очевидная возможность отбросить ненужный результат вызывает у вас негодования, я не понимаю. Если в контроллере встроен интерфейс JTAG или DebugWire, основное предназначение которых внутрисхеманая отладка, вы же не возмущаетесь когда кто-то использует их только для программирования или даже (о ужас!) использует вместо них ISP.
Эк бомбит человека от Си. Ну вот особенность языка такая, не стали выделять процедуры из функций, вместо этого заставили "возвращать" спецтип, нужный скорее для компилятора.никогда такого не было! наоборот, в моем представлении функция, возвращающая ничего - есть нонсенс, она должна называться процедурой.
Конечно, от частного к общему! Откуда возьмется общее если частного нет? В этом вся суть человеческого познания - наблюдая различные частные проявления вырабатывать все более и более общие теории.COKPOWEHEU, твои рассуждения о появлении терминов связанное с конкретными языками программирования - это от частного к общему...
И, как мне кажется, критерий в основе классификации у тебя другой.
То есть вам тоже не нравится, что я использую термин "подпрограмма" как "процедура без входных параметров"? Так предложите более подходящий общеизвестный термин!Подпрограмма - повторяющиеся действия в алгоритме. Критерий, свойство непосредственно "кусочка" алгоритма - повторяемость.
А ты исходишь из критерия функциональности способа вызова повторяющегося фрагмента.
Вот это "пофиг" встречается во всех языках. В том же Паскале функция может на принимать параметров а ее результат может игнорироваться, при этом она будет вести себя как подпрограмма. Так что "исключения и нестыковки в Си" обусловлены самим языком, а не философской концепцией функции.Вот это "пофиг" как раз и вносит всякие исключения и алогичности/нестыковки в Си.
Я исхожу из практики. Отличие процедуры от подпрограммы в том, что для нее существует прозрачный для программиста интерфейс передачи данных внутрь. Отличие функции от процедуры в том что существует интерфейс передачи данных наружу. Используются эти интерфейсы или нет - дело десятое.А ты исходишь из критерия функциональности способа вызова повторяющегося фрагмента.
Ну и вы правда считаете, что будет удобнее вырвать процедуры из множества функций и запретить игнорировать возвращаемое значение?




