Кіріспе

Функцияны атаусыз қайта шақыру Компьютерлік ғылымда анонимді рекурсия – функцияны тікелей атаусыз қайта шақыру. Бұл жоғары реттік функцияны пайдалану арқылы, функцияны аргумент ретінде жіберіп, оны шақыру арқылы немесе жасырын түрде, ағымдағы контекстке байланысты белгілі бір функцияларға, әсіресе "қазіргі функцияға" немесе кейде "қазіргі функцияны шақырушы функцияға" қол жеткізуге мүмкіндік беретін рефлексия мүмкіндіктері арқылы іске асырылуы мүмкін. Бағдарламалау практикасында анонимді рекурсия, әсіресе, оны қолдау үшін рефлексиялық мүмкіндіктерді ұсынатын JavaScript-те қолданылады. Дегенмен, жалпы бағдарламалау практикасында бұл жаман стиль деп есептеледі және атаулы функциялармен рекурсия қолдану ұсынылады. Функцияны аргумент ретінде жіберу арқылы анонимді рекурсия кез келген тілде мүмкін, бірақ бұл практикада сирек қолданылады, себебі ол атаумен тікелей қайталанудан ұзақ және нашар түсініледі. Теориялық компьютерлік ғылымда анонимді рекурсия маңызды, өйткені ол рекурсияны атаулы функцияларсыз іске асыруға болатынын көрсетеді. Бұл әсіресе лямбда-есептеу үшін маңызды, ол анонимді унитарлық функцияларға ие, бірақ кез келген рекурсивті функцияны есептеуге қабілетті. Бұл анонимді рекурсияны белгілі бір түйіндемелер арқылы жасауға болады.

Қолдану

Анонимді рекурсия ең алдымен анонимді функцияларға рекурсия жасауға мүмкіндік беру үшін қолданылады, әсіресе олар жабылу құрағанда немесе функцияның атын байланыстырудан аулақ болу үшін кері шақыру ретінде қолданылғанда. Анонимді рекурсия негізінен "ағымдағы функцияны" шақырудан тұрады, бұл тікелей рекурсияға алып келеді. Анонимді жанама рекурсия да мүмкін, мысалы, "шақырушыны (алдыңғы функцияны)" шақыру арқылы немесе, сирек жағдайларда, шақыру стегімен жоғары көтерілу арқылы, және бұл өзара рекурсияны жасау үшін тізбектеледі. "Ағымдағы функцияның" өзіне сілтемесі объектіге бағытталған бағдарламалаудағы "this" кілт сөзінің функционалдық баламасы болып табылады, ол ағымдағы контекстке сілтеме жасауға мүмкіндік береді. Анонимді рекурсия атаулы функциялар үшін де қолданылуы мүмкін, оларды атымен шақырудың орнына, мысалы, ағымдағы функцияда рекурсия жасалып жатқанын көрсету үшін немесе функцияның атын өзгертпей қайта атауға мүмкіндік беру үшін. Дегенмен, бағдарламалау стилі тұрғысынан мұндай амал көбінесе жасалмайды.