Обсуждение:Стратегия вычисления
Перейти к навигации
Перейти к поиску
Проект «Информационные технологии» (уровень II, важность для проекта высокая)
Эта статья тематически связана с вики-проектом «Информационные технологии», цель которого — создание и улучшение статей по темам, связанным с информационными технологиями. Вы можете её отредактировать, а также присоединиться к проекту, принять участие в его обсуждении и поработать над требуемыми статьями. |
"Строгая модель вычислений (англ. strict evaluation) означает, что аргументы всегда вычисляются полностью до применения функции к ним."
Непонятно, что имелось в виду. Какой функции к ним? Может до начала вычисления функции с этими аргументами?--109.252.89.34 20:47, 31 января 2016 (UTC)
- Какой бы то ни было. Вообще до использования. Если в коде стоит «
f(a,b)
», то сначала берутся значенияa
иb
, а уже потом осуществляется вызов чевой там. Так делает подавляющее большинство мейнстримных языков, поэтому в диковинку, когда это не так. Но, например, в haskell это не так — сперва осуществляется вызов, а потом, если потребуются значенияa
иb
, то они будут вычислены непосредственно в точке необходимости. Arachnelis 20:54, 31 января 2016 (UTC)
- По моему мнению фраза «аргументы всегда вычисляются полностью до применения функции к ним» звучит как-то не по-русски. Я бы сформулировал: «аргументы функции всегда вычисляются полностью до того, как функция с этими аргументами начинает выполняться». 109.252.89.34 14:12, 1 февраля 2016 (UTC)
- Такая терминология не соответствует принятой в аппликативных языках. Некоторые АИ проводят прямую грань между «вызовом функции» и «применением функции». Особенно актуально это в свете карринга. Сейчас написана максимально строгая, академическая формулировка. Я как-нибудь (не сейчас) попробую пересмотреть стиль изложения на более популярный. Например, в данном случае можно было бы написать что-то вроде «значение выражения вычисляется до его (выражения) использования», но так ещё более непонятно. Подумаю. upd: А в Хаскеле и сказать, что «функция начинает выполняться» тем более ошибка — «вход в функцию» не означает, что она выполняется — язык накапливает символьные вычисления, а по наступлении необходимости раскручивает только те значения, что используются. То есть если некий аргумент по итогам работы так и не потребовался, то он даже может быть определён как "фатальная ошибка" (в языке предусмотрено для этого специальное значение), но программа таки не вылетит, поскольку не вычислит этот аргумент. Arachnelis 18:52, 1 февраля 2016 (UTC)