function Ax(var b:integer):integer;
begin
b:=1;
Ax:=1
end;
А теперь отвлечемся от Паскаля (условно ).
С общей точки зрения кусок кода в примере - функция, процедура или функционально-процедурный мутант?
Спасибо за аргументированные ответы
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Функция, которая не является функцией |
Vinchkovsky |
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 98 Пол: Мужской Реальное имя: Andriy Репутация: 0 |
Рассмотрим такую функцию:
function Ax(var b:integer):integer; А теперь отвлечемся от Паскаля (условно ). С общей точки зрения кусок кода в примере - функция, процедура или функционально-процедурный мутант? Спасибо за аргументированные ответы |
Archon |
Сообщение
#2
|
Профи Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: 24 |
Можно ли считать функцией обособленный кусок кода, принимающий параметр, изменяющий его и возвращающий некоторое значение? Определённо.
-------------------- Close the World...txeN eht nepO
|
Vinchkovsky |
Сообщение
#3
|
Пионер Группа: Пользователи Сообщений: 98 Пол: Мужской Реальное имя: Andriy Репутация: 0 |
Archon, спасибо за ответ, тогда слова предподавателя о том, что функция возвращает одно значение, а процедура много, неверны?
Еще раз отмечу, что речь идет об основных понятиях программирования, не привязанных к конкретному языку |
volvo |
Сообщение
#4
|
Гость |
Цитата слова предподавателя о том, что функция возвращает одно значение, а процедура много, неверны? Не в этом отличие процедуры от функции... А в том, что возвращаемое функцией значение можно использовать непосредственно в выражении. С процедурой такое не пройдет...P.S. То, что ты привел - это функция с побочным эффектом, кстати... |
Archon |
Сообщение
#5
|
Профи Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: 24 |
В общем случае неверны. По идее процедура вообще не возвращает значения. Она может это делать только опосредованно: для Паскаля через var-параметры, например. Функция это тоже может делать. За подробностями сюда: Wikipedia: Функция (программирование)
-------------------- Close the World...txeN eht nepO
|
Vinchkovsky |
Сообщение
#6
|
Пионер Группа: Пользователи Сообщений: 98 Пол: Мужской Реальное имя: Andriy Репутация: 0 |
Цитата Не в этом отличие процедуры от функции... А в том, что возвращаемое функцией значение можно использовать непосредственно в выражении. С процедурой такое не пройдет... Понятно, так и отвечал предподавателю, он сказал, что это неверно и выдвинул свою версию. Я ему показал функцию, как в примере, на что он ничего внятного не ответил, сославшись на спешку. Поэтому и решил уточнить, все ли функции в Паскале есть функциями Возможно, все это звучит странно; дополнительно сбили с толку слова местного "гения" о том, что функции такого виду по определению ни функции ни процедуры (хотя, если уж так и мыслить, то это процедуры). Спасибо за ответ, который расставил все точки над ''i'' окончательно Archon, спасибо за ссылку; видно, предподаватель ошибся, хотя, возможно, хоте все пояснить понятно. Сообщение отредактировано: Vinchkovsky - |
Vinchkovsky |
Сообщение
#7
|
Пионер Группа: Пользователи Сообщений: 98 Пол: Мужской Реальное имя: Andriy Репутация: 0 |
Читаю в книге:
Цитата Если алгорит выдает одно значение ... то такой алгоритм может быть алгоритмом-функцией, если выдает много значений ... алгоритмом-процедурой В.Шелест, "Программирование", "БХВ-Петербург", 2002 Как с этим быть? Если утверджение верно, то в Паскале процедура выдает значение через var-параметры. Но тогда и функция может возвращать сколько угодно значений через var-параметры? Единственное логичное объяснение вижу в различии понятий "выдает" и "возвращает", хотя это звучит несколько бредово и предподаватель оперировал вторым понятием . |
volvo |
Сообщение
#8
|
Гость |
Цитата Если алгорит выдает одно значение ... то такой алгоритм может быть алгоритмом-функцией, если выдает много значений ... алгоритмом-процедурой Перефразируем: Если алгоритм выдает одно значение, он может быть реализован функцией. Если выдает много значений, то функцией (в чистом виде, без side-effects) он быть не может... И вот тогда уже он может быть реализован либо функцией, либо процедурой. Так понятнее?Цитата Но тогда и функция может возвращать сколько угодно значений через var-параметры? Может. В качестве побочного эффекта, повторяю. Но не должна. А одно - должна вернуть... |
Vinchkovsky |
Сообщение
#9
|
Пионер Группа: Пользователи Сообщений: 98 Пол: Мужской Реальное имя: Andriy Репутация: 0 |
Спасибо за помощь, писал сообщение в спешке, хорошо не подумал, уже в дороге вспомнил о побочном эффекте.
Немного запутала фраза с Википедии: Цитата Особенность, отличающая ее от процедур, состоит в том, что функция возвращает значение, ... . Я понял, что функция возращает одно значение, процедура не возращает + каждая из подпрограм может это делать опосредственно. Видимо, на самом деле имелось ввиду, что что функция обязательно возвращает значение, в отличии от процедуры, которая может это делать. Спасибо за помощь (на практике все понимаю, в теории же хотелось разобраться). |
Lapp |
Сообщение
#10
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
на практике все понимаю, в теории же хотелось разобраться). Ты писал где-то выше, что вопрос носит абстрактный характер, не привязанный к языку, но потом все же речь шла только о Паскале. Да, в Паскале фукнкция - это процедура, возвращающая значение. Иными словами, функиональность функции больше, чем процедуры. В языке Си процедур вообще нет, но зато в понятие функции внесено усовершенстовование: она не обязательно должна возвращать значение. Это еще раз показывает, что между функцией и процедурой отличия не принципиального, а чисто технического характера: функцию иногда удобнее использовать для вычисления параметров выражения. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 11.01.2025 10:24 |