Кіріспе

Компьютерлік ғылымда және компьютерлік бағдарламалауда, егер функция f аяқталмайтын өрнекке қолданғанда өзі де аяқталмаса, онда ол қатаң функция деп аталады. Бағдарламалау тілдерінің денотациялық семантикасындағы қатаң функция – бұл f функциясы, онда “bottom” деп аталатын ұғым, нормативтік мәнді қайтармайтын өрнекті білдіреді, себебі ол шексіз циклға түседі немесе нөлге бөлу сияқты қатеге байланысты тоқтатылады. Қатаң емес функция – қатаңдық танытпайтын функция. Қатаң бағдарламалау тілі – пайдаланушы анықтаған функциялары әрқашан қатаң болатын тіл. Интуитивті түрде, қатаң емес функциялар басқару құрылымдарына сәйкес келеді. Операциялық тұрғыдан алғанда, қатаң функция – әрқашан аргументін бағалайтын функция; ал қатаң емес функция – кейбір аргументтерін бағаламауы мүмкін функция. Бірнеше параметрлері бар функциялар әрбір параметр бойынша жеке-жеке қатаң немесе қатаң емес болуы мүмкін, сондай-ақ бірнеше параметрде бірдей қатаң болуы да мүмкін. Мысалы, көптеген бағдарламалау тілдеріндегі `if then else` өрнегі, C-ге негізделген тілдерде `? :` деп белгіленеді, оны үш параметрлі функция ретінде қарастыруға болады. Бұл функция өзінің бірінші параметрі бойынша қатаң, себебі функцияға нәтиже қайтармас бұрын, бірінші аргументінің мәні `true` немесе `false` екенін білуі керек; бірақ ол екінші параметрі бойынша қатаң емес, себебі мысалы, `if(false,,1) = 1`, сондай-ақ үшінші параметрі бойынша да қатаң емес, себебі мысалы, `if(true,2,) = 2`. Дегенмен, ол екінші және үшінші параметрлері бойынша бірлесіп қатаң, себебі `if(true,,) = ` және `if(false,,) = ` болады. Қатаң емес функционалдық бағдарламалау тілінде, қатаңдық талдауы – функцияның бір немесе бірнеше аргументтеріне қатысты қатаңдығын дәлелдеуге қолданылатын кез келген алгоритмді білдіреді. Мұндай функцияларды, мысалы, мән бойынша шақыру сияқты, тиімді шақыру конвенциясына компиляциялауға болады, бұл ретте қоршаған бағдарламаның мағынасын өзгертпейді.