Введение

В информатике и компьютерном программировании функция f считается строгой, если при применении к выражению, не завершающемуся в конечном времени, она также не завершается. Строгая функция в денотационной семантике языков программирования – это функция f, где сущность, называемая «bottom», обозначает выражение, которое не возвращает нормальное значение, либо из-за бесконечного цикла, либо из-за прерывания из-за ошибки, такой как деление на ноль. Функция, которая не является строгой, называется нестрогой. Строгий язык программирования – это язык, в котором пользовательские функции всегда строги. Интуитивно, нестрогие функции соответствуют управляющим структурам. Операционно, строгая функция всегда вычисляет свой аргумент; нестрогая функция может не вычислять некоторые из своих аргументов. Функции, имеющие более одного параметра, могут быть строгими или нестрогими по каждому параметру независимо, а также совместно строгими по нескольким параметрам одновременно. Например, выражение «if-then-else» во многих языках программирования, обозначаемое как «?:» в языках, вдохновленных C, можно рассматривать как функцию трех параметров. Эта функция строга по своему первому параметру, поскольку функция должна знать, вычисляется ли ее первый аргумент как true или false, прежде чем она сможет вернуть результат; но она нестрога по своему второму параметру, потому что, например, if(false, , 1) = 1, а также нестрога по своему третьему параметру, потому что, например, if(true, 2, ) = 2. Однако она совместно строга по своим второму и третьему параметрам, поскольку if(true, , ) = и if(false, , ) = .
В нестрогом функциональном языке программирования анализ строгости относится к любому алгоритму, используемому для доказательства строгости функции по отношению к одному или нескольким ее аргументам. Такие функции могут быть скомпилированы с использованием более эффективной конвенции вызова, такой как передача по значению, без изменения смысла окружающей программы.