Обсуждение:Стратегия вычисления

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

"Строгая модель вычислений (англ. 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)[ответить]